首页 > 解决方案 > 为什么我在这个函数中的 while 循环有问题?

问题描述

该函数旨在读取两个值,最小值和最大值。如果任一值小于 2,则会打印一条错误消息,并再次读入这两个值。

我尝试为 min < 2 和 max < 2 创建一个单独的 while 循环。我尝试在 or 运算符的每一侧为每个条件加上括号。我尝试用函数声明两个变量,并将一个设置为等于最大值,一个设置为最小值,并在循环中使用这些新变量。

void read_range(int & min, int & max)
{
cout << "Enter minimum and maximum: ";
 cin >> min >> max;
  while (max < 2 || min < 2); {
    cout << "Error. Minimum and maximum must be at least 2." << endl;
    cout << "Enter minimum and maximum: ";
    cin >> min >> max;
  }
  while (max < min) {
    cout << "Error. Minimum must be less than maximum." << endl;
    cout << "Enter minimum and maximum: ";
    cin >> min >> max;
  }
}

第二个while循环工作正常。

有 2 种奇怪的情况: 1. 如果输入的值小于 2,程序会继续读取值,必须手动停止:

Enter minimum and maximum: 0 5
5 6
1 2
50 90
90 50
^Z
[23]+  Stopped
  1. 即使两个输入的值都大于 2,while 循环仍会执行。即使重新输入的值小于 2,while 循环也不会再次执行:
Enter minimum and maximum: 5 10
Error. Minimum and maximum must be at least 2.
Enter minimum and maximum: 1 2
(program continues running after this).

此外,如果重新输入完​​全相同的值,则 while 循环不会再次执行:

Enter minimum and maximum: 5 10
Error. Minimum and maximum must be at least 2.
Enter minimum and maximum: 5 10
(program continues running after this)

任何帮助表示赞赏。

标签: c++

解决方案


你的第一个循环有一个错误;

while (max < 2 || min < 2); {

应该是这样的:

while (max < 2 || min < 2) {

推荐阅读