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

时间:2010-03-29 17:05:28

标签: c c99 scanf

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

5
1 2 3 4 99

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

的数组

最快的方法是什么?我的问题是读取多个数字而不通过整个字符串循环检查是否是空格或数字?

感谢。

5 个答案:

答案 0 :(得分:13)

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()

答案 1 :(得分:1)

以下是我从http://www.cplusplus.com/reference/cstring/strtok/采取的一个例子,我已经适应了我们的背景。

它在子链中拆分str链,然后将每个部分转换为int。我希望输入行是用逗号分隔的数字,没有别的。大小是数组的大小。你应该做scanf(“%d”,&amp; 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<size;i++){
    printf("%d. %d\n",i+1,list[i]);
  }
  return 0;
}

答案 2 :(得分:1)

这里&#39; N&#39;是Array&#39; A&#39;

的数组元素的数量
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<N; i++){
   fscanf(stdin, "%d", &A[i]);
   printf( "A[%d] is: %d\n", i, A[i]);
}

答案 3 :(得分:0)

scanf()是一种颈部疼痛。查看strtol()这类问题,它会让您的生活变得轻松。

答案 4 :(得分:-1)

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

#include<iostream>
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<<arr[i]<<" ";
 }