while 循环的错误输出

Incorrect output from while loop

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

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);

}

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