0
這是if語句我有:如果fgetc(fileName)在一個IF語句中,它會拉一個字符嗎?
if (fgetc(fileName) != EOF) {
}
我知道,如果我跑fgetc()
時不if
語句中它會刪除一個角色,我必須做ungetc
歸還。當fgetc
在if
聲明內時,會發生這種情況嗎?
這是if語句我有:如果fgetc(fileName)在一個IF語句中,它會拉一個字符嗎?
if (fgetc(fileName) != EOF) {
}
我知道,如果我跑fgetc()
時不if
語句中它會刪除一個角色,我必須做ungetc
歸還。當fgetc
在if
聲明內時,會發生這種情況嗎?
是的,因爲你沒有存儲讀取的字節,所以你失去了它。用這個代替:
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
,而不是一個文件名,並ungetc
不return
的性格,但把它放回輸入流,因此它可以被下一個讀fgetc()
或fgets()
...在再次從流中讀取數據之前,您可能無法一次多於一個字節地使用ungetc
。
我想把這行放回到輸入流中。那麼我是否必須在if語句和其他語句中添加ungetc? – Brandon
你不能用'ungetc'把整行放回到輸入流中,最多可以放回一個字節。由於您沒有讀取一個字節,所以不需要將任何東西放回'else'部分,就可以達到文件結束。 – chqrlie
我打算調用fgetc的目的是找出它是否是EOF。如果不是,我希望它繼續正常讀取,這就是爲什麼我要把字符串放回到流中的原因。那麼我需要把ungetc放在if和else的部分嗎? – Brandon