scanf的格式串中為何不應以 n結尾?

2022-03-31 13:07:13 字數 374 閱讀 8392

如果乙個scanf的格式串以\n結尾,那麼在讀取完後還會阻塞等待,比如:

int a;

scanf("%d\n", &a);

這種情況,輸入乙個數字然後敲下回車後,程式還是阻塞著的。為什麼呢?

在仔細讀了一遍《c程式設計現代方法》上的描述後,搞明白了。書上有這段描述:

處理格式串中的普通字元時,scanf函式採取的動作依賴於這個字元是否為空白字元。

格式串中,由於遇到了空白字元'\n',因此還會「重複讀空白字元直到遇到乙個非空白字元為止」,由於輸入緩衝已經沒有字元可讀了,因此將阻塞等待,直到讀入了乙個非空白字元為止。

這個時候,如果繼續按下空格或者回車,程式還是會阻塞,直到輸入乙個非空白字元為止。

scanf中的 n c格式

scanf 語法 include int scanf const char format,類似函式有 int scanf const char format,int fscanf file stream,const char format,指定輸入流 int sscanf const char st...

C語言scanf格式化字串中 c的使用建議

scanf c a 上面 在讀取的時候不會自動跳過空白字元 空格 tab 換行 所以在輸入的時候容易踩坑。scanf c a scanf格式化字串中的空格會匹配任意多個空白字元,所以上面只會讀取緩衝區中的第乙個非空白字元,而跳過任何空白字元,即使緩衝區中乙個空白字元都沒有,也不會因此出錯。所以推薦在...

scanf和gets在字串中的區別

用scanf不是不顯示空格,而是用scanf接收字串的話,在串首遇到空格的話,跳過,繼續尋找下乙個非空格字元,在串中遇到空格時,結束字串的輸入。所以如果使用者輸入 abcd efg 的話,scanf取得的字串為 abcd 而gets取得字串時,是在遇到eof 串尾 時停止,所以不存在這個問題。inc...