gpt4 book ai didi

c - C 中的文件正在识别不必要的行

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:17 25 4
gpt4 key购买 nike

我的程序应该读取一些片段来识别一个平面。每行 3 段。输入存档是:

3 4 25 -4 -30 2 6 7 9 10 3 4
3 4 4 -4 -3 2 6 7 9 10 5 6

它被读作坐标:(3, 4) (25, -4) (-30, 2) (6,7) (9,10) (3,4)

Segment 是一对坐标:S01 - (3,4) (25, -4) 等等

代码:

typedef struct{
int x1, x2;
int y1, y2;
int id;
}Segment;

int main(){

FILE *file;
int i=0, j=0;
Segment *seg;

seg=(Segment*)malloc(500*sizeof(Segment));

file = fopen("input.txt", "r");

while(!feof(file)){

for(i=0; i<3; i++){
fscanf(file, "%d %d %d %d", &seg[j].x1, &seg[j].y1, &seg[j].x2, &seg[j].y2);
seg[j].id=i+1;
printf("%d %d %d %d - ID: %d\n", seg[j].x1, seg[j].y1, seg[j].x2, seg[j].y2, seg[j].id);
j++;
}
}
fclose(file);

return 0;
}

预期输出:

 3 4 25 -4 - ID: 1
-30 2 6 7 - ID: 2
9 10 3 4 - ID: 3
3 4 4 -4 - ID: 1
-3 2 6 7 - ID: 2
9 10 5 6 - ID: 3

它给我的输出,我不知道为什么:

3 4 25 -4 - ID: 1
-30 2 6 7 - ID: 2
9 10 3 4 - ID: 3
3 4 4 -4 - ID: 1
-3 2 6 7 - ID: 2
9 10 5 6 - ID: 3
0 0 0 0 - ID: 1
0 0 0 0 - ID: 2
0 0 0 0 - ID: 3

我知道这一定是个愚蠢的错误,但是知道是什么原因造成的吗?!提前致谢:)

最佳答案

你应该测试fscanf()的返回值,它必须是4。此外,您没有以正确的方式使用 feof()“参见 why is while (!feof(file)) always wrong :它用于测试最后一个读取函数 (fread(), fscanf()...) 在文件末尾失败(参见 feof(3) and ferror(3) )

编辑:所以你的代码应该是这样的:

 while (fscanf(...) == 4)
{
// do things with data
}

// after reading loop, determine why it ended
if (feof(f))
{
// end of file reached
}
else if (ferror(f))
{
// error while reading
}
else
{
// fscanf failed, syntax error ?
}

关于c - C 中的文件正在识别不必要的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com