c語言中fgetc 函式返回值的問題

2021-09-20 06:18:33 字數 782 閱讀 1448

fgetc返回值的型別(以(1)中的**為例)

fgetc()返回型別為int,我們可以將其返回值賦給乙個int型別變數,如(1)中的**,即使是遇到字元0xff(blank的ascii碼,不是eof),while迴圈也不會結束,因為0xff會被轉化0x000000ff,顯然這與0xffffffff(eof)是不相等的,這時能完成正確複製;

如果用乙個char 型別的變數c 來接收fgetc()的返回值,會出現什麼情況? 假定下乙個讀取的字元為0xff 則:

char c = fgetc (rfp); // fgetc(rfp)的值為 0x000000ff, 然後強制轉化為char型別:c = 0xff

while(c != eof) ;     // 字元與整數比較? c 被帶符號(signed)擴充套件為0xffffffff,條件成立,檔案複製提前退出,故遇到空格字元時就退出,不能完成複製;

如果將c 定義為unsigned char,當讀到檔案末尾,返回 eof 也就是 -1 時:

unsigned char c = fgetc (rfp);// fgetc (rfp)的值為eof,即-1,即0xffffffff,然後強制轉化為uchar型別, c=0xff

while( c!= -1)  ;                        // c 被擴充套件為 0x000000ff, 永遠不會等於 0xffffffff,所以這次雖然能正確複製 0xff, 但卻不能判斷檔案結束. 事實上,在 c 為 uchar 時,c != -1 是永遠成立的!

因此,只能將c定義成int型別的變數,這樣才與fgetc返回型別一致。

C語言fgetc 函式的返回值

c語言fgetc 函式的返回值 本文 學習c語言的,檔案操作,大都會用到它。它的函式原型 int fgetc file stream 這個函式的返回值,是返回讀取的乙個位元組。如果讀到檔案末尾返回eof。eof其實就是乙個巨集 define eof 1 表示 1.既然返回的是乙個位元組,為什麼返回值...

C語言中scanf 函式的返回值

c語言中簡單的輸入scanf函式和輸出printf函式,我們經常使用,也很熟悉,但有時卻還是會在這兩個地方犯錯。scanf 函式 功 能 執行格式化輸入 用 法 int scanf char format argument,scanf 函式是通用終端格式化輸入函式,它從標準輸入裝置 鍵盤 讀取輸入的...

C語言的函式返回值

一 背景 談到c語言的函式返回值,可能會感覺很親切,不就是乙個函式返回值嘛,當初學c語言的時候早就學過了很easy嘛,我曾經也是這麼想的。後來要上研究生了,研究生階段搞得就是c,所以又重新開始學習c,學習c的過程中遇到了很多問題,在此部落格中一一記錄。實際過程中遇到的第乙個問題自然就是函式返回值了。...