c语言fscanf遇到逗号,C中的fscanf

您所在的位置:网站首页 fscanf读取数字 c语言fscanf遇到逗号,C中的fscanf

c语言fscanf遇到逗号,C中的fscanf

2024-07-17 15:18| 来源: 网络整理| 查看: 265

我正在通过fscanf()从文件中读取一组数字,我希望将每个数字放入数组中。问题是thosose数字用“,”分隔如何确定fscanf应该读取几个密码,当它在文件中找到“,”时,它会将它保存为整数?谢谢

答案

这可能是一个开始:

#include

int main() {

int i = 0;

FILE *fin = fopen("test.txt", "r");

while (fscanf(fin, "%i,", &i) > 0)

printf("%i

", i);

fclose(fin);

return 0;

}

使用此输入文件:

1,2,3,4,5,6,

7,8,9,10,11,12,13,

...输出是这样的:

1

2

3

4

5

6

7

8

9

10

11

12

13

你究竟想做什么?

另一答案

我可能会使用类似的东西:

while (fscanf(file, "%d%*[,

]", &numbers[i++]))

;

%d转换一个数字,“%* [, t n]]”读取(但不指定)任何连续的分隔符运行 - 我将其定义为逗号,空格,制表符,换行符,尽管这是改变你认为合适的东西是相当微不足道的。

另一答案

fscanf(file, "%d,%d,%d,%d", &n1, &n2, &n3, &n4);但如果数字之间有空格则不起作用。 This answer展示了如何做到这一点(因为没有库函数)

另一答案

Jerry Coffin的答案很好,但有几点需要注意:

fscanf在文件末尾返回一个(负)值,因此循环不会正确终止。

即使没有读取任何内容,i也会递增,因此最终会指向一个超过数据结尾的内容。

此外,如果在格式参数之间留出空格,fscanf会跳过所有空格(包括和)。

我会选择这样的东西。

int numbers[5000];

int i=0;

while (fscanf(file, "%d %*[,] ", &numbers[i])>0 && i

{

i++;

}

printf("%d numbers were read.

", i);

或者,如果要强制执行数字之间的逗号,可以使用"%d , "替换格式字符串。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3