2011-03-05 141 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