2012-12-23 234 views
1

我不明白爲什麼While循環只是加速並跳過char的scanf? 它甚至不會要求我的意見,只是像沒有明天一樣循環。while循環跳過scanf的條件。

#include <stdio.h> 


int main() 
{ 
    int number; 
    int multiply, ans; 
    char choice; 

    printf("-------------------------------------"); 
    printf("\n  MULTIPLICATION TABLE   "); 
    printf("\n-------------------------------------"); 


    do 
    { 

     printf("\nEnter an integer number:"); 
     scanf("%d", &number); 


     printf("\nMultiplication of %d is :-\n", number); 
     printf("\n"); 

     for(multiply=1; multiply<11; multiply++){ 
      ans = number * multiply; 
      printf(" %d", ans); 
     } 

     printf("\n"); 
     printf("\nWould you like to continue? [Y] for Yes,[N] for no : "); 
     scanf("%c", &choice); 
     printf("\n"); 

    } 
    while(choice='Y'); 

    printf("Thank You"); 
    return 0; 

}

回答

3

scanf()不符合您的想法(換行符,緩衝等)。它最好使用fgetc()

choice = fgetc(stdin); 

出於同樣的原因,你需要擺脫尾隨的換行符的是

scanf("%d", &number"); 

葉子在標準輸入緩衝區。要解決此問題,請在之後特別呼叫

fgetc(stdin); 

此外,C不是帕斯卡。等號比較運算符 - 和條件 - 您要查找的是

while (choice == 'Y') 

單等式標記表示賦值。

+0

@DCoder修復並不能解決有關'scanf()'的錯誤假設。 – 2012-12-23 07:25:26

+0

改變它,但仍然跳過輸入部分。 –

+0

@ user1924648你在使用什麼樣的瘋狂輸入數據?嘗試在'scanf(「%d」,&number)後插入另一個調用'fgetc()';'? – 2012-12-23 07:28:00

2

我認爲你需要使用==運營商的對比中while條件檢查:

while(choice=='Y'); 

目前使用的是=運營商,這是指派Ychoice變量。

+0

我已經修復了這部分,但它仍然不會等待我輸入。 –

+0

@ user1924648真的,使用'fgetc()'。 – 2012-12-23 07:26:06

+0

使用fgetc(),現在它不用等待我輸入任何東西就會退出循環。 它現在正在工作,我得到int後插入了一個額外的fgetc。 –

2

它已經很長一段時間,因爲我在這語言編程,而且一目瞭然,您有:代替

while(choice='Y'); 

while(choice=='Y'); 

==比較,=設置等於。所以while循環實際上不檢查你想設置的條件。

+0

「我已經修復了這部分,但它仍然不會等待我輸入。 - user1924648 1分鐘前」 – 2012-12-23 07:26:58