В вашей программе есть две основные проблемы.
Во-первых, условие addition != 'Q' || addition != 'q'
всегда равно true
, поскольку для любого значения addition
либо addition != 'Q'
, либо addition != 'q'
равно true
(т. Е. addition
никогда не может быть одновременно Q
и q
одновременно). Вы, наверное, имели в виду addition != 'Q' && addition != 'q'
Во-вторых, когда вы делаете cin >> addition
с переменной типа double
, вы либо получите действительное число, либо - если кто-то введет - например, «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;
}