提问人:Divya Yagnik 提问时间:6/23/2020 更新时间:6/24/2020 访问量:403
如何在 C 语言中要求无限的用户输入?
How to ask for infinite user inputs in C?
问:
我想创建一个无限循环,以便我能够要求用户提供最多 2 个输入,并将它们存储到数组 (a) 中,然后打印这些数组值。我希望它重新启动,并重复这个询问和重复的过程。使用我当前的代码,一旦我输入值并声明函数结束 (EOF),控制台就会无限打印出这些值,而不是重新启动并请求新值。
#include <stdio.h>
int main (void) {
int a[2];
int i = 0;
while (1 < 2) {
while(scanf("%d", &a[i]) != EOF) {
i++;
//i == number of inputs (max is 2)
}
int j = 0;
while(j < i) {
printf("%d ", a[j]);
j++;
}
}
return 0;
}
我的假设是 scanf(“%d”, &a[i]) 值在被声明为 EOF 后没有重置,但我不完全确定如何做到这一点。
答:
4赞
kiran Biradar
6/23/2020
#1
由于越界访问,您有未定义的行为。
您需要在每次迭代时重置 ,甚至更好地限制每次迭代的范围。i
i
int i = 0;
while (1) {
i = 0; // reset i
while(scanf("%d", &a[i]) == 1 && i < 2) {
i++;
//i == number of inputs (max is 2)
}
...
}
评论
0赞
Jabberwocky
6/23/2020
while (1 < 2)
?为什么不呢?while (1)
0赞
kiran Biradar
6/23/2020
@Jabberwocky我不知道。OP在想什么:D
评论
EOF
是文件的末尾,它有效地将输入流(从中读取的位置)标记为无效,并且您无法继续从中读取。您需要想出另一种检测“输入结束”的方法(例如,在读取两个值后停止读取)。stdin
scanf
do_forever(input 2 numbers; print these numbers)