Создание цикла while, который возвращает оператор (y / n) в Stack Overflow

Поэтому моя проблема заключается в том, что я пытаюсь создать налоговую программу, которая получает данные о доходе, статусе пользователя, а затем распечатывает результаты. Я могу сделать все это без ошибок. Однажды я пытаюсь получить его внутри цикла while, который предложит пользователю «Вы хотите снова вычислить?» пользователь может ввести y / n. «n» завершает программу, а «y» необходимо повторить программу, и пользователь снова вводит информацию и так далее. Я не могу заставить программу позволить пользователю вводить новые значения для переменных. Это будет повторять только результаты. Может ли кто-нибудь помочь мне с этим разобраться? Я перепробовал все, что мог, и проверил, где я могу и что делают другие, у меня не работает. Любая помощь приветствуется!

#include <iostream>
#include <string>
using namespace std;
double income, incomeTax;
char maritalStatus;
char again = 'Y';int main() {
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

income = -1;
//Taxable Singles
const double ts1 = 863;
const double ts2 = 2588;
const double ts3 = 4313;
//Taxable Marriage
const double tm1 = 1726;
const double tm2 = 5176;
const double tm3 = 8626;
//Tax Rates
const double tr1 = .023;
const double tr2 = .033;
const double tr3 = .052;
const double tr4 = .075;
double t1, t2, t3;
//Add variable
const double as1 = 25, as2 = 85, as3 = 181;
const double am1 = 40, am2 = 175, am3 = 390;
//Addition variable simplified
double a1, a2, a3;
//const strings
const string s = "single", m = "joint";
string status;

int i = 0;

//Beginning of Loop
while (again == 'y' || again == 'Y') {

while (income < 0) {
cout << "Please enter your taxable Income." << "\n (This must be a positive value): " << endl;
cin >> income;

if (cin.fail() || income < 0) {
cout << "Please try again. Needs to be a positive number." << endl;
cin.clear();
cin.ignore(40, '\n');
income = -1;
}
}
while (maritalStatus == false) {
cout << "Please enter m if married and filing joint return," <<
"\n or s if filing a single return: ";
cin >> maritalStatus;

if (maritalStatus != 's' && maritalStatus != 'm') {
cout << "Please try again. Needs to be a 's' or 'm'." << endl;
cin.clear();
cin.ignore(40, '\n');
maritalStatus = false;
}
}
if (maritalStatus == 's') {
t1 = ts1;
t2 = ts2;
t3 = ts3;
a1 = as1;
a2 = as2;
a3 = as3;
status = s;

}
else if (maritalStatus == 'm') {
t1 = tm1;
t2 = tm2;
t3 = tm3;
a1 = am1;
a2 = am2;
a3 = am3;
status = m;
}
if (income > 0 && income <= t1) {
incomeTax = (income - (0)) * tr1;
}
else if (income > t1 && income <= t2) {
incomeTax = (income - (t1 - 1)) * tr2 + a1;
}
else if (income > t2 && income <= t3) {
incomeTax = (income - (t2 - 1)) * tr3 + a2;
}
else if (income > t3) {
incomeTax = (income - (t3 - 1)) * tr4 + a3;
}

cout << "Your taxable income is " << "$" << income << endl;
cout << "and you're filing a" << status << " return." << endl;
cout << "Your income tax will be " << "$" << incomeTax << endl;

cout << "Go again? (y/n) ";
cin >> again; //change control variable

}// end loop

system("pause");
return 0;

}

-2

Решение

Вы, вероятно, должны иметь отдельную функцию, такую ​​как void doTaxes() содержать вашу бизнес-логику, то в main() Вы можете просто позвонить, пока ваше состояние верно. Вы можете установить для вашей условной переменной значение false внутри doTaxes или, что еще лучше, сделать doTaxes () типом int или bool и установить переменную условия на основе возвращаемого значения.

bool isTaxLoop(true);

void doTaxes(...);

int main()
{
while(isTaxLoop)
{
doTaxes();
}
return EXIT_SUCCESS;
}
1

Другие решения

Вы должны сбросить доход для второго прохода, как показано ниже.

income = -1;
while(again == 'y' || again == 'Y')
{
while(income < 0)
{
...
}
...
cout << "Go again? (y/n) ";
cin >> again;
income = -1; //< -- reset income ****
}// end loop
0

По вопросам рекламы [email protected]