#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 Addition\n"
<< "'S' For subtraction\n" << "'D' For division\n"
<< "'M' For multiplication\n";
cin >> variable;
switch (variable)
{
case 'A':
{
cout << "Enter 0 for input\n";
cin >> addition;
while(addition != 'Q' || addition != 'q')
{
cout << "Enter numbers for adding\nThen type in"
<< "Q or q to quit\n";
cin >> addition;
total += addition;
}
cout << "Your total is " << total << endl;
}
它从while循环的第一个cout语句开始无限循环。我将输入数字,然后一旦输入q或Q并按Enter键,它将立即无限循环。谢谢!
答案 0 :(得分:2)
您的while循环条件使用逻辑或。
假设您尝试退出循环并输入输入“ Q”。条件的第一部分将为FALSE,但条件的第二部分将为TRUE。由于它是逻辑OR,因此整个条件将为TRUE,并且将执行循环。如果输入“ q”,反之亦然。
因此,无论您输入什么内容,循环都会运行。
答案 1 :(得分:2)
程序中存在两个主要问题。
首先,条件addition != 'Q' || addition != 'q'
始终为true
,因为对于addition
的任何值,addition != 'Q'
或addition != 'q'
均为true
(即addition
永远不能同时是Q
和q
。您可能是说addition != 'Q' && addition != 'q'
第二,当您对类型为cin >> addition
的变量进行double
时,您将收到一个有效的数字,或者-如果有人输入-'Q',例如“ nothing”和一个错误标志已设置。 “无”表示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;
}