c - 从 C 中的文件中读取 int 或 float

标签 c

让我们考虑一个少于 10 个数字的文件,这些数字可以是 int 或 float。我想读取它们并将它们添加到数组中。

我面临的问题是,如果我只有整数,我可以做得很好,但每当它达到 float 时,它就会把事情搞砸

在文件.data

11
22
33.3
44
55

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void usage(char * message) ;


int main(int argc, char * argv[]){

    //opening the file
    FILE * flux = fopen("file.data", "r");
    if (!flux) usage("error opening the file");

    int array[10]; //array to host the data
    int i=0;
    int lu;

    while ((lu = fscanf(flux, "%i", &array[i])) !=EOF && i<10){
        printf("lu %i\n", lu );
        printf("array[%i] %i\n", i, array[i] );
        printf("\n");
        i++;
    }

    return 0 ; }

void usage(char * message) { fprintf(stderr, "%s\n", message) ; exit(1) ;}

输出:

lu 1
array[0] 11

lu 1
array[1] 22

lu 1
array[2] 33

lu 0
array[3] 0

lu 0
array[4] 4196464

lu 0
array[5] 0

lu 0
array[6] 4195936

lu 0
array[7] 0

lu 0
array[8] 904651696

lu 0
array[9] 32766

如何使用 fscanf 使其在达到 float 时不会陷入困境?

(我可以看出,声明一个 int 数组并尝试输入一些 float 似乎并不正确......有什么办法吗?)

编辑: 我的目标是能够读取我的数组并使用其索引打印其内容,例如使用我的数据:

0. 11
1. 22
2. 33.3
3. 44
4. 55

最佳答案

你只需要整数吗?如果是这样,您可以读取 float 并将它们转换为整数,然后再将它们放入数组中:

float tmp;
while ((lu = fscanf(flux, "%f", &tmp)) !=EOF && i<10){
    array[i] = (int)tmp; //you could use some rounding here
    printf("lu %i\n", lu );
    printf("array[%i] %i\n", i, array[i] );
    printf("\n");
    i++;
}

关于c - 从 C 中的文件中读取 int 或 float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302319/

相关文章:

c - 为什么预处理器条件给我这个输出

c++ - 如何将方法指针传递给结构(在 C/C++ 中)?

c - 维吉尼亚如何停止增量

c - 如何将 2 uint 的结构转换为 double

c - pthread_cancel() 并使用清理处理程序。

c - 取消引用 char 指针会导致段错误

python - 与 Project Euler : C vs Python vs Erlang vs Haskell 的速度比较

c.编程,代码不起作用

c - C语言读取并显示灰度图像。

c - 将动态结构传递给函数时出现段错误(核心转储)