2011-03-30 45 views
0

我正在从fscanf()读取文件中的一组数字,我想将它放入数组中。问题是,数字之间用“,”隔开,如何确定fscanf应该读取多个密码,并在文件中找到“,”时,它会将其保存为整数?谢谢- 如何确定逗号?

+1

请提供一些示例输入并解释您希望如何解析它以及结果应该如何。 – 2011-03-30 16:18:41

+1

只需在fscanf格式字符串中添加',',就像我在答案中所做的一样。例如。使用'“%f”,而不是'“%f”'。很多人需要为每行的最后一个数字使用一个单独的格式字符串,以避免不得不使用',' – thkala 2011-03-30 16:27:55

+0

终止行。它适用于我,对于每行的最后一行没有单独的格式,只需用逗号分隔并使用“% f,“太好了,非常感谢 – Waypoint 2011-03-30 16:33:58

回答

4

这可能是一个开始:

#include <stdio.h> 

int main() { 
    int i = 0; 

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

    while (fscanf(fin, "%i,", &i) > 0) 
     printf("%i\n", 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 

你究竟想干什么?

+0

谢谢,我已经尝试过了,但没有成功。我正在为一些计算填充内部矩阵 - 请参阅我的编辑 – Waypoint 2011-03-30 16:26:16

+0

我在ProjectEuler问题(即不同的输入)上尝试了此操作。令人惊讶的是,即使每行的最后一个字符不是逗号,这似乎仍然有效。 – ComputerScientist 2016-12-29 04:56:51

0

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

+0

只要'n1','n2' ...是指向'int'的指针,当然... – thkala 2011-03-30 16:24:54

2

我可能会使用类似:

while (fscanf(file, "%d%*[, \t\n]", &numbers[i++])) 
    ; 

的%d转换一个数字,而 “%* [,\ t \ n]” 读取(但不分配)的任何连续运行分隔符 - 我将它们定义为逗号,空格,制表符,换行符,尽管对于您认为合适的任何内容进行更改都相当简单。

+0

+1代码虽然很棒,但是因为看起来他开始使用它可能没有什么帮助,除了能够复制它。 – 2011-03-30 16:54:21