从stdin获取数字到C中的数组

时间:2012-04-08 07:03:47

标签: arrays getchar atoi

我正在尝试从stdin获取数字到数组。 stdin中的第一个数字是数组中元素的数量(数字可以是任何int)。 我这样做是为了获得第一个数字:

while(c=getchar()!=' '){
n*=10;
n+=atoi(c);
}

然后创建一个大小为n的数组。 现在我需要经历所有其他的

 while(c=getchar()!=EOF)

并向数组添加数字。数字用\ t分隔,有时也用\ n分隔。 我该怎么办?我一直想着一个小时,但仍然没有工作代码。 有帮助吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

除非你感觉特别自虐(或者由于家庭作业要求而不能),否则你通常会使用scanf

int n;
int *numbers;

scanf("%d", &n);

numbers = malloc(n * sizeof(*numbers));

for (int i=0; i<n; i++)
    scanf("%d", &numbers[i]);

为了更强大的错误处理,您经常需要使用fgets一次读取一行,然后使用sscanf(或类似的东西)将其解析为单个数字。

顺便说一句:不,你将回复从malloc转为int *。在C. #include <stdlib.h>中,它既不必要也不可取,并且如上所示分配结果。如果你的编译器给你一个关于转换的警告(或错误),那就意味着发生了两件事情之一:要么你忘记了#include <stdlib.h>,要么你实际上编译为C ++。如果您正在编写C ++,请编写真正的C ++,这意味着您根本不应该使用malloc