我的程序应该读取一些段来标识一个平面.每行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()
正确的方法"看看为什么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 ? }