我需要在c中编写一个程序,它将整数作为用户的输入。
输入示例:
10 20 50 70
用户按 Enter 然后输入结束 我无法想到实现这一目标的条件。我试着写:
int grades[1000];
int i=0;
while(scanf("%d", &grades[i])!=EOF)
{
i++;
}
它不起作用。
答案 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;
}
}