[英]C Read until end of file
我目前有代碼讀取4行,我希望能夠改變它直到EOF或我的MAX const int值。 我無法讓EOF工作正常,並想知道如何更改我的代碼來實現這一目標?
提前致謝
#include <stdio.h>
struct record{
char name[2];
int arrival_time;
int job_length;
int job_priority;
};
const int MAX = 40;
int main(void)
{
struct record jobs[MAX];
int i = 0;
int j;
FILE *f = fopen("data.dat","rb");
while (fscanf(f, "%s %d %d %d", &jobs[i].name, &jobs[i].arrival_time,
&jobs[i].job_length, &jobs[i].job_priority) == 4 && i < MAX)
i++;
for (j = 0; j < i; j++)
printf("%s %d %d %d\n", jobs[j].name, jobs[j].arrival_time,
jobs[j].job_length, jobs[j].job_priority);
fclose(f);
return(0);
}
就像是
while (fscanf(f, " %s ", &etc) != EOF) {
}
然后使用feof(f)
檢查它是否是fscanf
錯誤或實際上是EOF
。
你的代碼似乎做你想要的,除了:
char name[2];
名稱可能超過1個字符。
FILE *f = fopen("data.dat","rb");
你似乎在閱讀文本( "r"
)文件,而不是二進制文件( "rb"
)。
&jobs[i].name
應該是jobs[i].name
Personnaly,我會像這樣編碼:
for(i=0 ; i<MAX ; ++i) {
fscanf(f, "%s %d %d %d", &jobs[i].name, &jobs[i].arrival_time,
&jobs[i].job_length, &jobs[i].job_priority);
if(ferror(f) || feof(f)) break;
}
關鍵點在於,據我所知,您無法在不嘗試閱讀文件的情況下知道文件的結束。 這就是我在讀取數據后檢查feof()和ferror()的原因。 在循環結束時,變量i包含讀取數據的數量
您需要在while()
循環中更改測試的順序 - 您必須在調用fscanf()
之前測試i < MAX
,否則您可能會調用它太多次(您還應該傳遞jobs[i].name
沒有&
到fscanf
jobs[i].name
:
while (i < MAX && fscanf(f, "%s %d %d %d", jobs[i].name, &jobs[i].arrival_time,
&jobs[i].job_length, &jobs[i].job_priority) == 4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.