我有以下代码,我正在尝试读取一个逗号分隔的文本文件,需要获取值。 文本文件(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菜鸟所以它可能是一个简单的错误,但我无法弄清楚:(
答案 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);
fgets
已经读取数据,因此fscanf
%d
作为格式说明符(整数),但您想要读取浮点值(也更改v1
和v2
的类型!)fscanf
的第一个参数是文件流,因此您需要在那里提供ptr_file
。所以改成它:
fscanf(ptr_file, "%f,%f", &v1, &v2);
但请注意,此文本格式可能无法与其他区域设置一起使用,其中逗号是小数点!您应该考虑用引号括起逗号分隔的浮点值。