while (!feof(f1)) {
fread(&a, sizeof(a), 1, f1);
printf("%d\t", i++);
}
預期讀取 10000 筆記錄,實際輸出 25 次(或多讀一次)。
feof() 只在「讀操作嘗試讀取超過文件末尾」後才返回真,而非在到達末尾時即返回真。
流程:
feof(f1) 仍為假(因為上次讀成功)fread → 返回 0(讀取 0 項),不修改 afeof(f1) 變為真printfwhile (fread(&a, sizeof(a), 1, f1) == 1) {
printf("%d\t", i++);
}
while (true) {
size_t ret = fread(&a, sizeof(a), 1, f1);
if (ret != 1) break;
printf("%d\t", i++);
}
// 僅適用文本文件
while (fgets(buf, sizeof(buf), f1)) {
// 處理
}
\r\n → \n 轉換,feof 行為相對可預期fopen("in.dat","w") 默認文本,但 fwrite 寫結構體實為二進制):feof 極不可靠,因任意位元組模式可能匹配 EOF 標記feof()/ferror() 作為循環條件while (fin.read(reinterpret_cast<char*>(&a), sizeof(a))) {
cout << i++ << '\t';
}