循环时的输入验证是无限的
input validation while loop is infinite
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
double addition;
double subtraction;
double top, bottom;
double multiplication, multiplication2;
char variable;
double total = 0.0;
cout << "Type in:n'A' For Additionn"
<< "'S' For subtractionn" << "'D' For divisionn"
<< "'M' For multiplicationn";
cin >> variable;
switch (variable)
{
case 'A':
{
cout << "Enter 0 for inputn";
cin >> addition;
while(addition != 'Q' || addition != 'q')
{
cout << "Enter numbers for addingnThen type in"
<< "Q or q to quitn";
cin >> addition;
total += addition;
}
cout << "Your total is " << total << endl;
}
它从 while 循环中的第一个 cout 语句开始无限循环。我将输入数字,然后一旦我输入 q 或 Q 并按回车键,它就会立即无限循环。谢谢!
while 循环的条件使用逻辑 OR。
假设您尝试退出循环并输入输入"Q"。条件的第一部分将为 FALSE,但条件的第二部分将为 TRUE。由于它是一个逻辑 OR,那么整个条件将为 TRUE,循环将执行。如果您输入"q",则反之亦然。
因此,无论您输入什么,您的循环都会运行。
您的程序中有两个主要问题。
首先,条件addition != 'Q' || addition != 'q'
总是true
,因为对于任何addition
值,addition != 'Q'
或addition != 'q'
都是true
(即 addition
永远不可能同时Q
和q
)。你可能的意思是addition != 'Q' && addition != 'q'
其次,当您使用类型为 double
的变量进行cin >> addition
时,您将收到一个有效数字,或者 - 如果有人输入 - "Q",例如"无"并设置错误标志。"无"意味着addition
的价值保持不变。
要完成"一个数字或'Q'"的事情,你需要读取一个字符串并将其与"Q"
(或"q"
)进行比较,否则尝试将字符串转换为双精度。
代码片段可能如下所示:
int main() {
double sum = 0;
double toAdd;
std::string input;
bool end = false;
while (!end) {
cout << "enter a value to add (type Q or q to quit)" << endl;
cin >> input;
if (input == "Q" || input == "q") {
end = true;
}
else {
try {
toAdd = stod(input);
sum += toAdd;
} catch (out_of_range &e) {
cout << "input " << input << " is out of range." << endl;
} catch (invalid_argument &i) {
cout << "input " << input << " is not a valid number." << endl;
}
}
}
cout << "sum: " << sum << endl;
}
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- LibGit2 SSH身份验证失败
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- constexpr上下文中std::initializer_list的验证
- 循环无限运行C++解决骑士之旅问题
- 过载'operator new'如何导致无限循环?
- 正在验证c++中用户的整数输入
- 在Qt中实现无限可缩放的画布
- 加密++验证大文件签名
- C++卡验证问题
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 交换运算符 + 重载会导致无限递归
- 循环时的输入验证是无限的
- 输入验证,需要数字,而不是字符串.代码导致无限循环
- 在将用户输入验证为 int 时陷入无限循环
- 为什么下面的验证代码卡住了?当我输入1时忽略.输入w,进入一个无限循环
- 为什么我得到一个无限循环时验证我的用户输入