我想将文件中的所有整数读入一个列表/数组。所有数字由空格(一个或多个)或结束线字符(一个或多个)分隔。这样做最有效和/或最优雅的方法是什么?禁止使用c ++库中的函数。
我是这样做的:
/* We assume that 'buffer' is big enaugh */
int i = 0;
while(fscanf(fp, "%d", &buffer[i]) != EOF) {
++i;
}
示例数据:
1 2 3
4 56
789
9 91 56
10
11
答案 0 :(得分:1)
OP的代码很接近。针对1
而非EOF
进行测试,以便在出现非数字数据时,代码不会陷入无限循环。我会使用for()
循环,但while
也可以。
请注意"%d"
指示fscanf()
首先扫描并丢弃任何空格,包括' '
和'\n'
,然后再查找符号和数字。
#define N 100
int buffer[N];
int i,j;
for (i=0; i<N; i++) {
if (fscanf(fp, "%d", &buffer[i]) != 1) {
break;
}
}
for (j=0; j<i; j++) {
printf("buffer[%d] --> %d\n", j, buffer[j]);
}
答案 1 :(得分:0)
您可以使用fgets
将文件中的每一行读取为字符串,例如char *line
。
然后你可以通过char循环遍历该字符串char并使用isDigit
来确定该字符是否为数字。
要读取多个数字的数字,请将每个数字放在一个字符串中,并使用atoi
将它们转换为整数