2014-02-06 28 views
1

我試圖讓程序打印出「OK」,只要我在最後輸入'y'作爲選擇,但它不是循環,它只是打印出「OK」並結束該程序即使我在最後輸入'y'。請幫忙。程序不循環

#include <stdio.h> 
int main() 
{ 
    char c = 'y'; 
    while (c == 'y') 
    { 
     printf_s("OK\n"); 
     scanf_s("%c", &c); 
     if (c != 'y') 
     { 
      break; 
     } 
    } 
    return 0; 
} 
+0

我編輯了我的問題 – mib1413456

+2

您在windows系統中使用['fflush(stdin)'](http://msdn.microsoft.com/en-us/library/9yky46tz.aspx)之前scanf –

+1

您可能想要檢查[一個'scanf_s'參考](http://msdn.microsoft.com/en-us/library/w40768et.aspx)。 –

回答

4

在當你按下回車關鍵然後一個換行符\n傳遞到輸入與y一起第一次迭代。第二次迭代scanf_s讀數爲\n。 更改

scanf_s("%c", &c); 

scanf_s(" %c", &c); 
     ^Notice the space before %c 

之前%c說明符的空間可以消耗任何數量的空白字符。

+0

我試過你的方法,它不工作。 – mib1413456

+2

'scanf_s'方法要求所有存儲位置都必須遵循顯式大小。 – JaredPar

-1

%c之前放一個空格來跳過空格。

2

如下

scanf_s("%c", &c, 1); 

這個額外的參數指定所述c參數的大小更改scanf_s線。普通的舊scanf不需要這種說法,但與_s結束版本做

另外,if塊與break語句是不必要的,因爲在while循環條件有效地做同樣的事情。它可以被寫成如下

while (c == 'y') 
{ 
    printf_s("OK\n"); 
    scanf_s("%c", &c, 1); 
} 
0

你是錯的scanf

如果你使用這樣你也會看到它的工作..

 #include <stdio.h> 

int main() 
{ 
    int c = 1; 
    while (c == 1) 
    { 
     printf_s("OK\n"); 
     scanf_s("%d", &c); 
     if (c != 1) 
     { 
      printf_s("hello\n"); 
       continue; 
     } 

    } 
    return 0; 
} 
+0

他不是用scanf「錯」的。您可以掃描一個角色。 – MrHappyAsthma

+0

我沒說「scanf無法讀取字符!!!」 – goGud

+0

他正在使用scanf_s來掃描一個字符。將它改爲int並不能幫助他解決這個問題,因爲他的scanf_s沒有必要的第三個參數。他不是「你錯了scanf」 – MrHappyAsthma

0

OK我用scanf函數代替scanf_s的,解決了這個問題,謝謝大家。

+0

如果您想繼續使用'scanf_s',請參閱我的答案,因爲它會更正htis API的用法 – JaredPar