У меня проблема с моим кодом, каждый раз, когда я зацикливаю его на ответ "y" (Да), он переходит в бесконечность?
Я пытаюсь сделать кредитный калькулятор, и каждый раз, когда пользователь совершает расчет с транзакцией и хочет выполнить сброс, и выполняет другой расчет, если он вводит значение "y", и если он войдет в "n", программа закончится,
Вот мой код:
#include <iostream>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;
int main() {
char ans = 'y';
do {
string name;
int Months;
int n;
double LoanAmount, Rate, MonthlyInterest, TotalLoanAmount, MonthlyAmortization, OutstandingBalance;
cout << fixed << showpoint;
cout << "Enter Name of Borrower: ";
getline(cin, name);
cout << "Enter Loan Amount: ";
cin >> LoanAmount;
cout << "Enter Number of Months to Pay: ";
cin >> Months;
cout << "Enter Interest Rate in Percent(%): ";
cin >> Rate;
cout << setprecision(2);
MonthlyInterest = LoanAmount * Rate;
TotalLoanAmount = LoanAmount + (MonthlyInterest * Months);
cout << "Monthly Interest: " << MonthlyInterest << endl
<< "Total Loan Amount with interest: " << TotalLoanAmount << endl;
cout << setw(100)
<< "\n\tSUMMARY OF OUTSTANDING INSTALLMENT" << endl
<< "\tName of Borrower: " << name
<< "\n\nMonth\t\tMonthly Amortization\t\tOutstanding Balance"
<< "\n";
for(n = 1; n <= Months; n++) {
MonthlyAmortization = TotalLoanAmount / Months;
OutstandingBalance = TotalLoanAmount - MonthlyAmortization;
cout << n << "\t\t" << MonthlyAmortization << "\t\t\t" << n - 1 << OutstandingBalance << endl;
}
cout << "\nEnd of Transaction";
cout << "Do you want to compute another transaction?[y/n]?" << endl;
cin >> ans;
}
while(ans == 'y');
}
После создания cin >> ans добавьте две строки:
cin.clear();
cin.sync();
Это обычно фиксирует множество бесконечных проблем с циклом, которые я получаю с cin.
Кроме того, я бы рекомендовал не инициализировать ans как "y", когда вы его объявляете. Я не думаю, что это вызывает у вас проблемы, но это неважно.
Кажется, вы ожидаете нажатия y и введите для регистрации только "y". Если вы хотите получить ввод только одного символа, посмотрите std::cin.get(char)