2011-03-05 1 views
1

Lorsque j'exécute le programme suivant, l'utilisateur saisit les détails du compte, puis l'imprime correctement, mais il ne peut pas lire la valeur opt (y/n). Il appelle automatiquement à nouveau. Comment puis-je sortir le programme quand l'utilisateur entre "n"?Question sur la saisie avec scanf

char opt; 
    do 
{ 

//Getting user input 

printf("\n Enter the Account Number:\n "); 
scanf("%d",&gAccNo_i);          
printf("\n Enter the Account Holder's Name:\n "); 
scanf("%s",gCustName_c); 
printf("\n Enter the Balance Amount:\n "); 
scanf("%f",&gBlncAmt_f); 

//Printing the input data. 

printf("\n Account Number  : %d",gAccNo_i); 
printf("\n Customer Name  : %s",gCustName_c); 
printf("\n Balance Amount  : %f",gBlncAmt_f); 

printf("\n Do u want to wish to continue?(y/n)"); 
scanf("%c",&opt); 
}while(opt!='n'); 
+0

Est-ce une tâche à faire par hasard? –

+0

Quelle est la valeur de 'opt' au moment où vous pensez qu'il contient 'n'? – tgdavies

+3

Boîtier de commutateur? Quelle? – quasiverse

Répondre

3

utilisation opt=getch(); inplace de scanf("%c",&opt);

OU

scanf lit les espaces qui reste dans la mémoire tampon de ligne précédente. Pour ignorer les espaces, ajoutez un espace au "% c":

scanf(" %c", &opt); 
+0

c'est aussi ma réponse .. :) – newbie

0
scanf("%c",&opt); 

lirons fait dans un caractère espace/retour à la ligne. Ce qui ne sera évidemment pas égal à "n".

Vous pouvez prendre l'entrée sous forme de chaîne, puis vérifier si le premier caractère est un 'n'.

char opts[5]; 
scanf("%s",opts); 
while(opts[0] !='n'); 
+1

Vous pourriez vouloir mettre une limite de taille dans votre 'scanf' de sorte que de longues réponses ne causeront pas de débordements de tampon. –

+0

@Jeremiah: Comment mettre une taille limite à scanf? Merci. –

+1

Utilisez '% 4s' au lieu de'% s' pour un tampon de taille 5 (la limite de longueur de chaîne n'inclut pas le 0 octet de fin, selon la page de manuel 'scanf'). –