如何在c中将未知数量的整数转换为数组

时间:2015-01-06 18:11:57

标签: c

我需要在c中编写一个程序,它将整数作为用户的输入。

输入示例:

  

10 20 50 70

用户按 Enter 然后输入结束 我无法想到实现这一目标的条件。我试着写:

int grades[1000];
int i=0;

while(scanf("%d", &grades[i])!=EOF)
{
     i++;
}

它不起作用。

2 个答案:

答案 0 :(得分:2)

阅读用户输入的,然后解析是@The Paramagnetic Croissant

的最佳方法

如果代码无法预先定义输入缓冲区大小或必须解析该行,那么使用scanf("%d",...就行了。查找'\n'时会出现非优雅代码。

#define N 1000
int grades[N];
int i=0;

for (i=0; i<N; i++) {
  // Consume leading white-space, but not \n
  int ch;
  while ((ch == fgetc(stdin)) != '\n' && isspace(ch));

  // normal exit
  if (ch == '\n' || ch == EOF) break;

  ungetc(ch, stdin);
  if (1 != scanf("%d", &grades[i])) {
    // Non-numeric data
    break;
  }
  i++;
}

答案 1 :(得分:1)

如果你需要阅读整行,那么读一整行,就像那样简单。如果你google&#34; C read line&#34;,你很可能最终会阅读fgets()的文档。然后你google&#34; C将字符串转换为整数&#34;,你就会发现在C标准库中存在一个名为strtol()的函数。有了这两种武器,并运用了一些逻辑,你可以推断出这样的东西:

const size_t max_numbers = 1000; // however many

int numbers[max_numbers];
size_t index = 0;

char buf[LINE_MAX];
while (index < max_numbers && fgets(buf, sizeof buf, stdin)) {
    char *p = buf;
    char *end;
    while (index < max_numbers && *p && *p != '\n') {
        numbers[index++] = strtol(p, &end, 10);
        p = end;
    }
}