C 读取由逗号分隔的数字文件

标签 c

我正在尝试读入一个包含由逗号操作的数字的文件,并将它们存储在一个没有逗号的数组中。

例如:processes.txt包含

0,1,3
1,0,5
2,9,8
3,10,6

一个名为 numbers 的数组应该如下所示:

0 1 3 1 0 5 2 9 8 3 10 6

我目前的代码是:

FILE *fp1;
char c; //declaration of characters

fp1=fopen(argv[1],"r"); //opening the file



int list[300];


c=fgetc(fp1); //taking character from fp1 pointer or file
int i=0,number,num=0;

while(c!=EOF){ //iterate until end of file
    if (isdigit(c)){ //if it is digit
        sscanf(&c,"%d",&number); //changing character to number (c)
        num=(num*10)+number;

    }
    else if (c==',' || c=='\n') { //if it is new line or ,then it will store the number in list
        list[i]=num;
        num=0;
        i++;

    }

    c=fgetc(fp1);

}

但是如果它是两位数,就会有问题。有没有人有更好的解决方案?谢谢!

最佳答案

对于逗号前没有空格显示的数据,您可以简单地使用:

while (fscanf(fp1, "%d,", &num) == 1 && i < 300)
    list[i++] = num;

如果有一个,这将读取数字后面的逗号,如果没有,则静默忽略。如果数据中的逗号前可能有空格,请在格式字符串中的逗号前添加一个空格。 i 上的测试可防止您在 list 数组的范围之外进行写入。 ++ 运算符在这里发挥作用。

关于C 读取由逗号分隔的数字文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301438/

相关文章:

c - 获取当前关键焦点 clutter_actor 之前具有关键焦点的 clutter_actor

c - 在 Mac 上的 Xcode 中查看 C 代码的输出

c - 为什么文件仅包含第一次迭代的打印内容

c - 将十六进制字符串中的 "0x"替换为C中的 "\x"

c - 预期的缓冲区溢出并不总是导致程序崩溃

c - 发出 dbus-send 命令后,如何使用 C 调用方法?

c++ - Fortran 中 REAL(KIND=real_normal) 的 C 等效类型是什么?

c - 编写此代码的编译器友好且与字节序无关的方式是什么?

c++ - Long 变量到 char 数组

c - 具有 avx 支持的 nvcc 找不到 gcc 内置内在函数