2015-05-09 19 views
2

試圖在論壇上看,但不能reslove。fgetc()不會停在EOF

我正在嘗試從文本中讀取。文本是: 「對b」

但是,雖然使用fgetc(),EOF沒有達到,並在最後我得到'\ n',然後無窮'y'樣本。

這裏是我的代碼:

Node* getBinTree(FILE *fsrc){ 
    Node* root=NULL; 
    unsigned char tmp=NULL; 
    while ((tmp=fgetc(fsrc))!=EOF) 
     globalArray[tmp]++; 
    return root; 

}

非常感謝

+0

thriks很多人! – noyuzi

回答

2

您遇到的問題與fgetc返回的內容有關。返回類型爲int,但您將其存儲到unsigned char

您必須將其更改爲int或作爲替代方案使用feof來檢查文件結束條件。

1

使用int tmp。 EOF不能存儲在字符中,因爲它不是字符。

1

fgetc()返回一個有符號的整數,但程序將結果存儲在一個無符號字符中。當從有符號類型轉換爲無符號類型時,負數(EOF通常定義爲-1)變爲正數(在本例中爲小數256),所以如果EOF爲負數,返回值與EOF的比較將始終返回false 。要修復代碼,請將「tmp」的聲明從「unsigned char」更改爲「int」。