Probleme boucle For en C

Fermé
sou - 31 janv. 2010 à 13:38
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 31 janv. 2010 à 14:45
Bonjour,

J'ai un petit programme de tri à faire en C,

Mais j'ai un problème des le début avec mon "FOR" , c'est a dire, pour une boucle de 12 caractères ( je veux saisir des lettres) il arrêtent la boucle au 6e caractères, pourtant i est bien définis à 0 au début.

Si quelqu'un pouvait m'aider ça serait vraiment sympa, car là je bugge et c'est frustrant ^^

#include <stdio.h>
#include <stdlib.h>

int main()
{
int intermediaire=0;
char tab[12];
int i=0,j=0;
system("Cls");
printf( "saisir Vos 12 valeurs \n ");
for (i=0;i<11;i++)
{
scanf("%c",&tab[i]);
}
}
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
31 janv. 2010 à 13:55
Salut,
C'est normal. Lorsque l'utilisateur va écrire un caractère et appuyer sur la touche entrée pour valider, il y aura deux caractères qui vont être envoyés dans le buffer clavier (sa touche et le '\n').
Soit tu prends que les caractères différents du '\n', soit tu vides explicitement le buffer après chaque itération ou soit tu ne fais de boucle mais tu lis directement le mot avec fgets (ou scanf("%11s",tab);

Par ailleurs, n'oublie pas d'insérer le '\0' manuellement si tu passes par par scanf("%c",tab+i). A noter que pour lire un caractère, on utilise plutôt getchar() qui est moins gourmand.

Et enfin n'oublie pas le return 0 final.
Cdlt,
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
31 janv. 2010 à 13:58
Salut,

A chaque saisie d'une lettre il y a un \n (saut de ligne) qui traine dans le bouffer. Du coup tu saisis 6 caractères et la boucle for se finie puisque il avait aussi 6 \n

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int intermediaire=0;
  char tab[12];
  int i=0,j=0;
  system("Cls");
  printf( "saisir Vos 12 valeurs \n");
  for (i=0;i<12;i++)
  {
    scanf("%c",&tab[i]);
    while(getchar()!='\n')
      ;
  }
}

0
Olalalala ce n'etait que ça....


Merciii beaucoup en tout cas , je viens d'économiser quelques heures de recherches .



Cordialeemnt
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
31 janv. 2010 à 14:45
Re,

ce n'etait que ça....
Il ne faut pas minimaliser les effets des caractères qui trainent dans le buffer

Je te conseille de lire cette article
0