在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函數成功獲取從控制檯這次字符串?
在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函數成功獲取從控制檯這次字符串?
從GCC手冊頁(我沒有Windows好用):
%C:字符固定數量的匹配,始終。最大字段寬度說明如何讀取多個字符;如果不指定最大值,則默認值爲1.它也不會跳過初始空白字符。
%s:匹配一串非空白字符。 它跳過並丟棄最初的 空格,但在閱讀某些內容後遇到更多空白時停止。 [這個條款應該解釋你所看到的行爲。 ]
無法理解問題,但scanf忽略所有空白字符。 n
是一個空白字符。如果你想檢測用戶何時按下輸入,你應該使用fgets。
fgets(str, 10, stdin);
sry for bad eng :(我認爲我應該用'get'而不是'retrieve'這個詞,我只是混淆了意思。 – Jaebum
這裏需要多一點輸入。你在控制檯上輸入什麼內容?你想得到什麼?沒有理由說上述代碼不能按預期工作,但這取決於預期的內容。 – Martin