C,从单输入线读取多个数字(scanf?)

我在C中编写了一个应用程序,它需要输入两行。 第一个输入表示int数组的大小,第二个输入包含由空格分隔的值。 例如,以下输入

5 1 2 3 4 99 

应该创建一个包含{1,2,3,4,99}的数组

最快的方法是什么? 我的问题是读取多个数字而不循环遍历整个字符串检查它是空格还是数字?

谢谢。

 int i, size; int *v; scanf("%d", &size); v = malloc(size * sizeof(int)); for(i=0; i < size; i++) scanf("%d", &v[i]); 

完成后请记得free(v)

此外,如果由于某种原因你已经在字符串中有数字,你可以使用sscanf()

以下是一个来自http://www.cplusplus.com/reference/cstring/strtok/的示例,我已根据我们的上下文进行了调整。

它在子链中拆分str链,然后将每个部分转换为int。 我希望输入行是用逗号分隔的数字,没别的。 大小是数组的大小。 你应该做scanf(“%d”,&size); 正如德尼尔森在答案中所述。 最后,您的int数组包含所有值。

 int main(){ int size = 5, i = 0; char str[] ="10,20,43,1,576"; int list[size]; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str,","); list[i] = atoi(pch); i++; while (pch != NULL) { pch = strtok (NULL, ","); if(pch != NULL) list[i] = atoi(pch); i++; } for(i=0;i 

这里’N’是数组’A’的数组元素数

 int N, A[N]; printf("Input no of element in array A: "); scanf("%d", &N); printf( "You entered: %d\n", N); printf("Input array A elements in one line: "); for(int i=0; i 

scanf()是一种颈部疼痛。 查看strtol()是否存在此类问题,它将使您的生活变得轻松。

这段代码采用了直接的方法,通过getchar()读取每个字符。我们继续读取一个数字,我们找到一个空格。数组的索引’i’在此之后得到更新。这一过程一直重复直到换行(’\ n’)遇到了

 #include main() { char ch; int arr[30] ; ch =getchar(); int num = 0; int i=0; while(ch !='\n') { if(ch == ' ') { arr[i] = num; i++; num = 0; } if(((ch -48) >=0) && (ch-48 <=9)) num = (num*10) + (ch - 48); ch = getchar(); } arr[i] = num; for(int j=0;i<=i;j++) std::cout<