2010-01-18 36 views
4

在Windows上,scanf()如何工作?

char c; 
int i; 

scanf("%d", &i); 
scanf("%c", &c); 

計算機跳過,因爲「\ n」是在緩衝器剩餘從控制檯獲取字符。 但是,我發現下面的代碼運行良好。

char str[10]; 
int i; 

scanf("%d", &i); 
scanf("%s", str); 

就像上面的例子中,「\ n」是留在緩衝區,但爲什麼scanf函數成功獲取從控制檯這次字符串?

+1

這裏需要多一點輸入。你在控制檯上輸入什麼內容?你想得到什麼?沒有理由說上述代碼不能按預期工作,但這取決於預期的內容。 – Martin

回答

6

從GCC手冊頁(我沒有Windows好用):

%C:字符固定數量的匹配,始終。最大字段寬度說明如何讀取多個字符;如果不指定最大值,則默認值爲1.它也不會跳過初始空白字符。

%s:匹配一串非空白字符。 它跳過並丟棄最初的 空格,但在閱讀某些內容後遇到更多空白時停止。 [這個條款應該解釋你所看到的行爲。 ]

1

無法理解問題,但scanf忽略所有空白字符。 n是一個空白字符。如果你想檢測用戶何時按下輸入,你應該使用fgets。

fgets(str, 10, stdin); 
+0

sry for bad eng :(我認爲我應該用'get'而不是'retrieve'這個詞,我只是混淆了意思。 – Jaebum