fscanf返回错误的数字

时间:2017-04-23 19:29:58

标签: c scanf

我正在尝试阅读看起来像这样的文本文件

8
6 1 2.2
1 2 1.0
4 3
1 3
4 5 1.2
2 4 0.0
5 2
6 6
3 4

这是我的代码

int nodes;
FILE* file = fopen(argv[1], "r");
fscanf(file, "%d",  &nodes);
printf("n = %d\n", nodes);

while (1) {

    int node = 0, link = 0;
    float weight = 0.0;

    if (fscanf(file, "%d %d %f \n", &node, &link, &weight) < 1) {
        break;
    } else {
        printf("%d %d %.1f \n", node, link, weight);
    }
}

这是输出

n = 8

6 1 2.2
1 2 1.0
4 3 1.0 
3 4 5.0 
1 0 0.0

1 个答案:

答案 0 :(得分:0)

如果您以不同方式格式化输入,则会发现错误

8
6 1 2.2
1 2 1.0
4 3 1
3 4 5
1.2 2 4
0.0 5 2
6 6 3
4

fscanf尝试使用转化1.2阅读"%d"时,它会将1分配给相应的变量,并将该点保留在缓冲区中以供下次读取。

下一次读取再次使用转换"%d",它不接受点作为有效输入。