2010-10-26 11 views
2

je ne parviens pas à ce code de langue c:Deuxième scanf ne fonctionne pas

char st[2]; 

printf("enter first value:"); 
scanf("%c", &st[0]); 

printf("enter second value:"); 
scanf("%c", &st[1]); 

Donc, mon ordinateur ne m'a pas demandé d'entrer dans la deuxième valeur, je veux dire qu'il imprime seulement la première printf déclaration puis j'entre un caractère et puis il imprime seulement la deuxième déclaration printf et la fin du programme sans prendre la deuxième entrée.

Aidez-nous s'il vous plaît. Quel est le problème avec ce code?

-Merci à l'avance.

+1

duplication possible: http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c – Alam

+0

Ce doit être le jour pour les questions 'scanf'. [Même problème que celui-ci] (http://stackoverflow.com/questions/4016073/scanf-fails-why), je pense. []() –

Répondre

8

Eh bien, il l'a fait. Le (s) caractère (s) produit (s) par la touche ENTRÉE est déjà présent dans le tampon.

+0

+1 J'ai besoin d'apprendre à taper plus vite: D – nathan

3

Je pense que votre problème est le deuxième scanf qui reçoit la touche "Entrée".

+0

+1 de moi, vous étiez à seulement 12 secondes derrière moi :) – leppie

3

Vous obtenez la nouvelle ligne implicite que vous avez entrée en tant que second caractère, c'est-à-dire que st[1] obtient la valeur '\n'. Un moyen facile de résoudre ce problème est d'inclure la nouvelle ligne dans la chaîne de format attendu: scanf("%c\n", &st[0]);

2

changement

scanf("%c", &st[0]); 

à cette

scanf(" %c", &st[0]); 

C'est une réponse shotty (pas de vérification d'erreur ou quoi que ce soit) mais c'est rapide et facile.

0

utiliser fflush(stdin); fonction avant la seconde scanf();. Il va vider la touche ENTRÉE générée après scanf(). En fait, votre deuxième scanf() prend l'entrée comme entrée et puisque scanf se termine après avoir reçu une entrée, il ne prend rien d'autre à vos côtés.

Questions connexes