回覆列表
  • 1 # C語言答疑課堂

    我們使用C語言程式設計時,從鍵盤輸入C語言字串的時候,最後透過按下回車鍵把這些字串送給C程式處理,這裡的回車鍵會產生一個回車符,這是關鍵。可能題主的問題很多人看不懂,所以我寫一個C程式來描述這個問題。

    1、C程式來描述題主的問題

    上述C程式不難,就是使用C語言的getchar函式從緩衝區中讀入一個個的C字元,再透過putchar函式把這些字元再一個個地輸出。執行結果如下:

    好了,我要問各位一個問題:putchar函式輸出“C Program”之後,我繼續輸入“C++ Program”,為何系統不讓我從“C Program”後面繼續輸入?也就是為何不是這個樣子的輸入:C Program C++ Program

    系統讓我另起一行輸入了,這是為啥?

    2、緩衝區有換行符

    我在輸入字串“C Program”後,會按下回車鍵把這一段C字串送給C程式處理,此時會產生一個“換行符”,也就是此時的字串變成“C Program\n”。

    那麼getchar函式會一個一個地讀取這些C字元,然後透過putchar函式一個一個地輸出這些字元。當getchar函式讀入換行符“\n”時,putchar函式就會輸出這個換行符,也就是螢幕的游標已經移到下一行了,所以當你輸入字串“C++ Program”時,就是另起一行輸入了。

    3、留一個題目

    那麼現在我把上述C程式再改寫下,如下所示:

    我在while迴圈結束之後,在C程式第12行又添加了一條puts語句,如果我的輸入還是“C Program”和“ C++ Program”,那麼請問此時輸出的字串“C and C++ Program”將會顯示在哪個位置?你知道嗎?

  • 2 # 和不同

    先說結論:不需要另起一行。

    例子程式:

    編譯、執行此程式,並輸入"hg",執行結果為:

    可以看到,cdhg在同一行。

    執行環境:Ubuntu Linux 16.04

    在樓主編寫的程式執行時出現這種現象,可能是因為C標準IO的行緩衝機制造成的。

    預設情況下,stdio輸入為行緩衝,輸出也可能是行緩衝。

    輸出為行緩衝時,當輸出攢滿一行(標準庫收到一個換行符)後,才會將之前的一行資訊傳送出來。所以當程式只用putchar輸出"c","d"時,由於沒有換行符,"c","d"不顯示,直到有了換行符才顯示,這就造成"cd","hg"不在同一行。

    要解決此問題,可以輸出"cd"後,flush標準輸出:fflush(stdout)

    此語句將強制將緩衝區內的資料輸出。

    不同系統下的效果未必一樣,可以試試。

  • 中秋節和大豐收的關聯?
  • 西紅柿蝦仁的做法大全蝦仁怎麼做好吃?