使用C语言存储.dat文件中的整数和浮点数

时间:2016-10-02 15:35:40

标签: c file floating-point scanf

感谢您的关注。我有一个.dat文件格式如下:

3 10.9
1 2.1
(empty line)
10 10.05
10 200

对于每一行,我想将第一个数字(整数)存储到变量a中,并将第二个浮点数存储在变量

int c;
FILE *fp = fopen("supermarket.dat", "r");
while ((c = fgetc(fp)) != EOF) {
    int var1;
    float var2;
    fscanf(fp, "%d%f", &var1, &var2);
    printf("%d\n", var1);
    printf("%f\n", var2);
}

现在我的程序没有错误,但所有数据都是错误的。 CMD中的出局是:

10
0.900000
1
2.10000
10
10.050000
10
200.0000000
10
200.000000

正如您所看到的,某些数据是错误的,并且它没有将空行打印为0 0。 正确的输出应该是:

3 
10.9
1
2.1
0
0
10 
10.05
10
200

1 个答案:

答案 0 :(得分:0)

您正在使用2个“并发”例程读取输入:fgetc(读取字符)和fscanf(读取格式化输入)。 fgetc部分以错误的方式消耗字符。

我想你调用它是因为你想检查文件是否已到达,但这不是正确的方法。

改为:

while (1) {
    int var1;
    float var2;
    int nb_toks = fscanf(fp, "%d%f", &var1, &var2);
    if (nb_toks<2) break;
    printf("%d\n", var1);
    printf("%f\n", var2);
}

fscanf返回成功读取的项目数,因此当您到达文件末尾时,它会返回1或0,这意味着您可以退出循环。