c++ - 为什么我在这个函数中的 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
- 即使两个输入的值都大于 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)
任何帮助表示赞赏。
解决方案
你的第一个循环有一个错误;
:
while (max < 2 || min < 2); {
应该是这样的:
while (max < 2 || min < 2) {
推荐阅读
- python - 有没有办法更新 Python 字典的值但如果它不存在则不添加键?
- python - Ctypes 问题 - 无法使用 64 位 DLL 与 32 位 DLL - OSError:异常:访问冲突读取
- javascript - MongoDB collection.findOne() 返回未定义的值
- javascript - 嵌套循环数组 .length 属性
- java - 如何将函数从 onBindViewHolder 移动到 ViewHolder
- apache-kafka - Kafka Streams 限制堆外内存
- android - Hilt ViewModel 注入
- javascript - 如何引用子组件内的 DOM 元素?[反应JS]
- animation - 如何在动画期间使 d3 条的高度以相同的速度增长
- django - Django:通过传递 Django 对象生成插入语句