c - 用 C 语言存储 .dat 文件中的整数和 float

标签 c file floating-point scanf

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

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

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

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

最佳答案

您正在使用 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,这意味着您可以跳出循环。

关于c - 用 C 语言存储 .dat 文件中的整数和 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39818620/

相关文章:

c - UNIX cc 可执行位置

c++ - float vs unorm 0->1,哪个更精确?

c - 添加/减去 float /整数 linux C

java - 如何将字节数组转换为文件

Xcode 4 将图像添加到项目中

rust - 如何将 f64 转换为 f32 并获得最接近的近似值和下一个更大或更小的值?

c - 使用字母在C中绘制圆的最佳方法

c++ - C/C++混合编程 : gdb segmentation fault frequently

c++ - 在 Windows x64 中检查内存泄漏的免费应用程序?

Python - 如何将视频文件读取为二进制数据?