2014-02-25 107 views
1

計劃:循環問題,而循環執行額外的迭代

#include <stdio.h> 
int main() { 
    char t; 
    while(1) { 
     t='\0'; 
     printf("\nExit?(y/n): "); 
     scanf("%c", &t); 
     if(t=='y' || t=='Y') { 
      return 0; 
     } 
     else 
     printf("\nContinuing..."); 
    } 
    return 0; 
} 

輸出:

$ vim Return.c 
$ gcc -o Return Return.c 
$ ./Return 

Exit?(y/n): n 

Continuing... 
Exit?(y/n): 
Continuing... 
Exit?(y/n): n 

Continuing... 
Exit?(y/n): 
Continuing... 
Exit?(y/n): y 
$ 

'n'作爲輸入之後,

Continuing... 
Exit?(y/n): 

循環一個更多時間,無需用戶輸入。如果代碼有任何錯誤,請告知我

+0

後,你已經忘記了換行符'y' ... –

回答

2

您需要確保scanf丟棄換行符。嘗試像這樣:

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

只是好奇,想知道它是如何將新的生產線作爲輸入,因爲「%C」只需要一個字符作爲輸入正確的? – DragonX

+0

@DragonX: - scanf(「%c」,&c1)和scanf(「%c」,&c2)之間的區別在於沒有空格的格式讀取下一個字符,即使它是空格,空白跳過空白(包括換行符)並讀取下一個不是空白的字符。 「Enter」按鍵向標準輸入發送'\ n',這是您的第二次scanf呼叫掃描的內容。 –

+1

我明白了,謝謝 – DragonX

2

嘗試在scanf語句的格式標識符中給出空格。嘗試類似

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

對於scanf中的輸入錯誤感到抱歉。 – user3152555