Probleme boucle For en C
sou
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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]);
}
}
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:
- Probleme boucle For en C
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
- Opera mini for pc - Télécharger - Navigateurs
3 réponses
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,
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,
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
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') ; } }
Olalalala ce n'etait que ça....
Merciii beaucoup en tout cas , je viens d'économiser quelques heures de recherches .
Cordialeemnt
Merciii beaucoup en tout cas , je viens d'économiser quelques heures de recherches .
Cordialeemnt
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
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