c語言中getchar 函式乙個常見Error

2021-08-13 22:28:44 字數 841 閱讀 6303

getchar() 從這個名字來看應該是 得到乙個字元。 正好c語言裡面有乙個char型別, 很容易就出現了如下程式:

# include int main (void)

return 0;

}

主要談一下下面這條語句:

while((c = getchar()) != eof)
首先 getchar函式的原型是:int getchar(void); 上面這條while語句的意思是:如果標準輸入檔案中輸入的不是eof,那麼執行迴圈體。 getchar函式返回值是乙個int型,但是上面我們使用了char型來接, 這就意味著c可能不能容下所有可能的字元,可能無法容下eof。

因此最終結果存在兩種可能:一種是某些合法的字元被「截斷」之後的值與eof相同, 這種情況導致的結果就是複製可能會提前停止。 第二種情況是可能無法取到eof,即死迴圈。

其實還有一種情況:這個程式能順利執行是因為巧合。why?

好好解釋一下這條語句, 按照我的理解應該是:將getchar函式的返回值放在c的記憶體空間裡面,如果記憶體不夠,就「截斷」。然後將c和eof作比較。 如果c不是eof,那麼成立。但是許多編譯器並不是這麼實現的。 這些編譯器確實對getchar的返回值做了「截斷」處理,但是與eof比較的不是c,而是getchar函式的返回值。具體怎麼實現的我也不知道,可能是用乙個變數來記錄getchar的返回值,然後與eof比較;也可能是其他的。 如果我們使用的編譯器是上面這種,那麼結果就和我們最初的預想相同了。但是如果不是這樣呢?  所以說這個乙個巧合。 我們用的時候應該使用int型變數來「裝」getchar的返回值。

------------------

C 語言中的getchar 函式 和EOF

在c 語言中有個重要的庫函式getchar 可從終端獲得乙個字元的ascii碼值。在終端輸入字元時並非輸入乙個字元就會返回,而是在遇到回車換行前,所有輸入的字元都會緩衝在鍵盤緩衝器中,直到回車換行一次性將所有字元按序依次賦給相應的變數,在這裡一定要注意最後乙個字元即 n 該字元也會賦給乙個相應的變數...

C語言中,getchar 函式的使用事項

getchar 是從鍵盤中讀取字元,它一次接受乙個字元 如果一次敲的字元多於乙個,包括回車字元,它會將剩下的字元存入快取中,下次繼續執行。例如下面的 所示 include include includeint main printf end n while 1 printf end n else r...

c語言中的getchar 和putchar

getchar 和putchar 函式時字元輸入輸出函式,其返回值都是int 整型。getchar 從鍵盤上輸入乙個字元,函式的返回值是輸入的第乙個字元的ascii碼字元的ascii值,若出錯返回 1,且將使用者輸入的字元回顯到螢幕。注意 1 使用者在按回車之前輸入了不止乙個字元,其他字元會保留在鍵...