我的程序应该读取一些片段来识别一个平面。每条线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)
一段是一对坐标: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: %dn", 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()
"参见为什么while (!feof(file))
总是错误:它用于测试最后一次读取功能(fread()
、fscanf()
…)是否在文件结尾失败(参见feof(3)
和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 ?
}