2011-03-05 142 views
1

当我执行下面的程序时,它获取用户输入的帐户详细信息,然后正确打印,但无法读取opt值(y/n)。它会再次自动调用。当用户输入“n”时,如何让程序退出?关于使用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

这是一次机会作业吗? – 2011-03-05 07:13:19

+0

'opt'在你期望它包含'n'时有什么值? – tgdavies 2011-03-05 07:15:26

+3

开关盒?什么? – quasiverse 2011-03-05 07:15:45

回答

3

使用opt=getch();地质储量scanf("%c",&opt);

OR

scanf读取在由前行缓冲器左空白。要跳过空格,请在“%c”中添加一个空格:

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

这也是我的答案.. :) – newbie 2011-03-05 07:19:08

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

将在空间/换行符实际读取。这显然不等于'n'。

您可能希望将输入视为字符串,然后验证第一个字符是否为'n'。

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

您可能希望在您的'scanf'中放置一个大小限制,以便长时间回答不会导致缓冲区溢出。 – 2011-03-05 07:17:45

+0

@Jeremiah:如何把scanf的大小限制?谢谢。 – 2011-03-05 07:23:02

+1

对于大小为5的缓冲区,使用'%4s'而不是'%s'(根据'scanf'手册页,字符串长度限制不包括尾随的0字节)。 – 2011-03-05 07:24:40