2014-10-01 46 views
-3

這個程序在while循環的每次迭代中似乎都不會接受輸入,理想情況下它應該如此。但是,當我用%d替換scanf()函數的%c參數(即一個整數輸入,而不是一個字符輸入),它似乎只是工作絕對好,哪個輸入接受每循環的while循環。爲什麼我看到這種差異?C:循環內的scanf()

int main() 
{ 
    char grade; 
    int i=0; 

    while(i<10){ 
     printf("Enter ur grade\n"); 
     scanf("%c", &grade); 
     switch(grade){ 
      case 'A' : printf("U R THE BEST\n"); 
         break; 
      case 'B' : printf("U R VERY GOOD DUDE...\n"); 
         break; 
      case 'C' : printf("U R GOOD DUDE...\n"); 
         break; 
      case 'D' : printf("U R Not good DUDE...\n"); 
         break; 
      case 'E' : printf("U R WORST DUDE...\n"); 
         break; 
      default : printf("U r AWESOME...\n"); 
         break; 
     } 
    i++; 
} 
+1

你能舉一個你得到的輸入和輸出的例子嗎? – 2014-10-01 16:06:54

+2

scanf不會從輸入緩衝區中刪除換行符。許多dups上SO:http://stackoverflow.com/questions/13275417/why-scanfd-does-not-consume-n-while-scanfc-does(不真的愚蠢,但解決您的問題) – 2014-10-01 16:07:09

+0

每次你輸入char(實際上是輸入兩個字符),在輸入流中留有一個換行符('\ n'),這將在下一次迭代中消耗。你需要用'getchar()'或類似的技術來清除它。 – 2014-10-01 16:07:17

回答

-1

scanf%c前添加一個空格。這是爲了在掃描字符之前從stdin中刪除所有空白。 scanf在輸入字符後不會輸入\n(輸入密鑰)字符,並將其保留在緩衝區中,此時再次調用scanf

另一件事:你忘了在你的代碼中放置一個}

-1

試試這個:在%c之前放一個空格,這是因爲它也存儲了\n

scanf(" %c", &grade);