Как я могу получить пользовательский ввод для выхода из цикла?

0

У меня проблема с моим кодом, каждый раз, когда я зацикливаю его на ответ "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');


}
  • 0
    Сначала отформатируйте свой код.
  • 1
    Вы должны иметь в виду, что когда кто-то нажимает «ввод», он посылает дополнительные символы конца строки. так что "y <enter> - это не просто y, а" y \ n "или" y \ r \ n ". Тем не менее, ans == 'y' должен корректно завершиться неудачно, если он у вас есть, если вы не введете ... хорошо, у.
Теги:
nested-loops
loops
infinite-loop

2 ответа

0
Лучший ответ

После создания cin >> ans добавьте две строки:

cin.clear();
cin.sync();

Это обычно фиксирует множество бесконечных проблем с циклом, которые я получаю с cin.

Кроме того, я бы рекомендовал не инициализировать ans как "y", когда вы его объявляете. Я не думаю, что это вызывает у вас проблемы, но это неважно.

  • 0
    Спасибо!! Это мне очень помогло! :)
0

Кажется, вы ожидаете нажатия y и введите для регистрации только "y". Если вы хотите получить ввод только одного символа, посмотрите std::cin.get(char)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню