如何在 C 语言中要求无限的用户输入?

How to ask for infinite user inputs in C?

提问人:Divya Yagnik 提问时间:6/23/2020 更新时间:6/24/2020 访问量:403

问:

我想创建一个无限循环,以便我能够要求用户提供最多 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 后没有重置,但我不完全确定如何做到这一点。

C 数组输入 EOF

评论

2赞 Some programmer dude 6/23/2020
EOF文件的末尾,它有效地将输入流(从中读取的位置)标记为无效,并且您无法继续从中读取。您需要想出另一种检测“输入结束”的方法(例如,在读取两个值后停止读取)。stdinscanf
1赞 Gerhardh 6/23/2020
“//i == 输入数(最大值为 2)” 您的代码似乎并不关心该最大值。
0赞 Peter - Reinstate Monica 6/23/2020
所以算法是?do_forever(input 2 numbers; print these numbers)
0赞 Armali 6/23/2020
这回答了你的问题吗?在 C 中从 eof 恢复 stdin

答:

4赞 kiran Biradar 6/23/2020 #1

由于越界访问,您有未定义的行为。 您需要在每次迭代时重置 ,甚至更好地限制每次迭代的范围。ii

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