从C中的文件扫描字符串和整数

时间:2018-10-06 21:12:24

标签: c file

我正在尝试将文件中的值放入变量中。我有一个fruits.txt文件,其中包含以下数据。

bananas,5
apples,3
kiwi,7

逗号将水果的名称与价格分开。我的目标是将名称放入名为fruit的字符串中,并将价格放入名为price的int中,将文件指针移至下一行,然后打印。

FILE * fptr = fopen("fruit.txt", "r");
char fruit[10];
int price = 0;

fscanf(fptr, "%s,%d\n", fruit, &price);
printf("%s,%d\n", fruit, price);

fclose(fptr);

这是我到目前为止所拥有的。但是,我的输出是bananas,5,0。看来它正确地执行了第一部分,但随后又添加了一个,0。有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

  

我的输出是'bananas,5,0'。好像正在做第一部分   正确,但再添加一个,0。

由于%s也占用了定界符(,),因此将完整的bananas,5放入fruit变量中。

如果您检查了fscanf的返回值,它只是返回1,而没有将%d读入price变量中。

解决方案:

您可以使用[^,]作为分隔符,以,读取字符串,并将fscanf放入while循环检查2的返回值。

示例代码。

FILE * fptr = fopen("fruit.txt", "r");
char fruit[10];
int price = 0;

while(fscanf(fptr, "%9[^,],%d%*[\n]", fruit, &price) == 2)
    printf("%s,%d\n", fruit, price);

fclose(fptr);