【问题标题】:How to ask for infinite user inputs in C?如何在 C 中请求无限的用户输入?
【发布时间】:2020-06-23 08:31:07
【问题描述】:

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

【问题讨论】:

  • EOFfile 的结尾,它有效地将输入流 stdinscanf 从中读取)标记为无效,您无法继续从中读取。您需要想出另一种检测“input 结束”的方法(例如,在读取两个值后停止读取)。
  • "//i == 输入数(最大值为 2)" 您的代码似乎并不关心该最大值。
  • 所以算法是do_forever(input 2 numbers; print these numbers)?
  • 这能回答你的问题吗? Recover stdin from eof in C

标签: c arrays input eof


【解决方案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)
    }
    ...   
}

【讨论】:

  • while (1 &lt; 2)?为什么不while (1)
  • @Jabberwocky 我不知道。 OP在想什么:D
猜你喜欢
  • 2022-11-11
  • 2019-06-20
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多