2016-01-20 48 views

回答

0

是的,因爲你沒有存儲讀取的字節,所以你失去了它。用這個代替:

int c; 
if ((c = fgetc(fp)) != EOF) { 
    ungetc(c, fp); /* put the byte back into the input stream */ 
    /* not at end of file, keep reading */ 
    ... 
} else { 
    /* at end of file: no byte was read, nothing to put back */ 
} 

另外請注意,你應該通過一個FILE*fgetc,而不是一個文件名,並ungetcreturn的性格,但把它放回輸入流,因此它可以被下一個讀fgetc()fgets() ...在再次從流中讀取數據之前,您可能無法一次多於一個字節地使用ungetc

+0

我想把這行放回到輸入流中。那麼我是否必須在if語句和其他語句中添加ungetc? – Brandon

+0

你不能用'ungetc'把整行放回到輸入流中,最多可以放回一個字節。由於您沒有讀取一個字節,所以不需要將任何東西放回'else'部分,就可以達到文件結束。 – chqrlie

+0

我打算調用fgetc的目的是找出它是否是EOF。如果不是,我希望它繼續正常讀取,這就是爲什麼我要把字符串放回到流中的原因。那麼我需要把ungetc放在if和else的部分嗎? – Brandon

相關問題