c - while 循环的错误输出

标签 c while-loop

此函数要求输入一个介于 loLimit 和 hiLimit 之间的整数,并允许用户安全地输入它。它会一直询问,直到用户输入合法范围内的数字。然后它返回合法的数字。

The correct output should be:
Please enter an integer between 32 and 127: 19
Please enter an integer between 32 and 127: 128
Please enter an integer between 32 and 127: 48
Please enter an integer between 48 and 127: 47
Please enter an integer between 48 and 127: 65

但是,我的输出表现得很奇怪,好像 loLimit 值来回变化。此外,数字仅在输入两次后才被记录。

Please enter an integer between 32 and 127: 2
Please enter an integer between 32 and 127: 150
Please enter an integer between 32 and 127: 56
Please enter an integer between 32 and 127: 56
Please enter an integer between 56 and 127: 66
Please enter an integer between 32 and 127: 66
Please enter an integer between 66 and 127: 77

这是我的代码:

int enterNumber (int loLimit, int hiLimit){
    int min;
    int max;

    do {
    printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit);
    scanf("%d", &min);
    }
    while (min<loLimit || min>hiLimit);
    return min;
}

int main(){
    enterNumber(32,127);
    int min=enterNumber(32,127);

    enterNumber(min,127);
    int max=enterNumber(enterNumber(32,127),127);


}

最佳答案

您调用了 enterNumber() 函数 5 次,因此采用了 5 个可接受的值:

  enterNumber(32,127);
  Please enter an integer between 32 and 127: 56 
  1st accepted number

  int min=enterNumber(32,127);
  Please enter an integer between 32 and 127: 56  // 2nd one
  2nd accepted number

  enterNumber(min,127);
  Please enter an integer between 56 and 127: 66
  3rd accepted answer.

  int max=enterNumber(enterNumber(32,127),127);    //called twice
  Please enter an integer between 32 and 127: 66
  Please enter an integer between 66 and 127: 77
  4th and 5 th accepted answer 

您可以通过删除第一个和第三个 enternumber 调用来更正您的逻辑,如图所示。

   int enterNumber (int loLimit, int hiLimit){
   int min;
   int max;

   do {
      printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit);
      scanf("%d", &min);
      }
   while (min<loLimit || min>hiLimit);
   return min;
  }

  int main(){
 // enterNumber(32,127); comment out this
  int min=enterNumber(32,127);

  // enterNumber(min,127);
   int max=enterNumber(min,127);
   int no=enterNumber(min,max);

首先它接受一个最小值,然后是一个最大值,最后在这个范围内输入一个否。

关于c - while 循环的错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30950719/

相关文章:

C 无法在 while 循环工作和 "double free or corruption"错误中获取数组中的搜索编号

c - 在恢复线程时将参数传递给线程。 (WinAPI)

algorithm - while循环时间复杂度

C - 取消引用 3D 数组时出现段错误

c - sqlite3编程在Linux C中得到 "out of memory"

c++ - while 循环不会在 bool 条件下停止

search - php分页和搜索

java - 游戏小程序未在2D游戏中运行(while循环)

C 数组结构,尝试访问数据,但对所有数组都得出相同的结果

CoreAudio AudioQueue PCM 快速且不稳定