读取文本文件值

时间:2014-10-21 14:00:59

标签: c

我有以下代码,我正在尝试读取一个逗号分隔的文本文件,需要获取值。 文本文件(out.txt)包含2个数字:

12.4,45.8

我的代码是:

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

int main()
{
    system("python Grab_Values.py > out.txt");

    FILE *ptr_file;
    char buf[1000];
    int v1;
    int v2;

    ptr_file =fopen("out.txt","r");
    if (!ptr_file)
            return 1;
    while (fgets(buf,1000, ptr_file)!=NULL)
            fscanf(buf, "%d,%d\n", &v1, &v2);

    fclose(ptr_file);
    printf("%d" "\n", v1);
    return 0;
}

编译时出现以下错误:

test.c: In function âmainâ:
test.c:17:10: warning: passing argument 1 of âfscanfâ from incompatible pointer type [enabled by default]
/usr/include/stdio.h:445:12: note: expected âstruct FILE * __restrict__â but argument is of type âchar *â

我仍然是一个c菜鸟所以它可能是一个简单的错误,但我无法弄清楚:(

3 个答案:

答案 0 :(得分:0)

您正在使用'fscanf',它用于从文件中读取。我想你想用'sscanf'来读取你读取文件内容的'buf'char数组的输入。

奖励积分 - 您实际上可以使用fscanf并取消'fgets'。

答案 1 :(得分:0)

代码中的错误在这里,

fscanf(buf, "%d,%d\n", &v1, &v2); 

fscanf()需要FILE*,或者更明确的是stream,但是你要给出一个字符指针..

如果您想从字符指针

中读取,可以使用sscanf()

答案 2 :(得分:0)

这个有三个问题:

while (fgets(buf,1000, ptr_file)!=NULL)
        fscanf(buf, "%d,%d\n", &v1, &v2);
  1. fgets已经读取数据,因此fscanf
  2. 不再可用
  3. 您使用%d作为格式说明符(整数),但您想要读取浮点值(也更改v1v2的类型!)
  4. fscanf的第一个参数是文件流,因此您需要在那里提供ptr_file
  5. 所以改成它:

    fscanf(ptr_file, "%f,%f", &v1, &v2);
    

    但请注意,此文本格式可能无法与其他区域设置一起使用,其中逗号是小数点!您应该考虑用引号括起逗号分隔的浮点值。