当前位置:  开发笔记 > 编程语言 > 正文

C中的文件识别不必要的行

如何解决《C中的文件识别不必要的行》经验,为你挑选了1个好方法。

我的程序应该读取一些段来标识一个平面.每行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

我知道这一定是一些愚蠢的错误,但任何关于是什么导致它的想法?!提前致谢 :)



1> Mathieu..:

你应该测试返回值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 ?
 }

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有