2013-10-22 50 views
1

我正在嘗試使用do-while執行一個小程序。無法完全執行do-while循環

#include<stdio.h> 
#include<conio.h> 
void main() 
{ 
char another; 
int num; 
do 
{ 
    printf("Enter a number"); 
    scanf("%d",&num); 
    printf("Square of %d id %d",num,num*num); 
    printf("Want to another another number y/n"); 
    scanf("%c",&another); 
}while(another=='y'); 
} 

現在,當我嘗試執行該程序時,它運行良好。我輸入一個數字並顯示它的正方形。然後我看到Want to enter another number y/n。但只要按任意鍵(y或n),程序就會自行退出,然後按Enter鍵提供輸入。我嘗試了很多次,但沒有成功。

但是,如果我要求用戶輸入1或2(代替y/n),程序運行良好。在這種情況下,它需要一個整數輸入,並可以檢查while塊。如果another == 1,程序再次運行。

我的問題是,爲什麼我無法檢查while條件中的字符。

回答

1

它不工作的原因是scanf得到num後,新生產線尚處於緩衝,因此將在下一個scanf%c格式說明進行處理。固定它的一個直接的方法是使用:

scanf(" %c", &another); 
//  ^space 

請注意,您的原始scanf("%c:,&another);將無法​​編譯,但我認爲這是一個錯字。並始終使用int main,或者它是未定義的行爲。

+0

感謝兄弟。你真的幫了我很多。我厭倦了想我的代碼有什麼問題。你救了我。但是,你能解釋一下爲什麼我需要%c之前的空間,而不需要%d? –

+0

@ user2899258基本上,這是因爲一個新的行字符是一個有效的字符,但不是一個有效的整數,所以當格式說明符具有''''''''''或''時,'scanf'將只處理空格字符(包括新行) 'N'。在'%c'之前添加一個空格會使'scanf'忽略所需字符之前的任何空格。 –