Я делаю банковскую программу, которая запрашивает несколько входов, таких как номер счета, имя и баланс. Предполагается, что баланс будет равномерно распределен в течение 10 месяцев. Но по какой-то причине, когда я ввожу имя с пробелом между выводами, цикл будет бесконечно. Я думал, что использование getline (cin, name) поможет устранить проблему, но это создаст больше проблем. Ввод некоторых чисел также вызывает бесконечный цикл.Почему мой выход бесконечно зацикливается?
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
void displayColumnTitle() {
cout << "MONTH BALANCE DUE" << endl;
}
float calculateBalanceDue(float balanceDue, float paymentAmt) {
balanceDue = balanceDue - paymentAmt;
return balanceDue;
}
void displayBalance(int month, float balanceDue) {
cout << left << setw(10) << month << right << setw(7)
<< setiosflags(ios::fixed) << setprecision(2) << balanceDue << endl;
}
int main() {
float accountNumber = 0;
float balanceDue, paymentAmt;
int month = 1;
string name;
while (accountNumber != -1)
{
cout << "Enter Account Number(-1 to terminate the input):" << endl;
cin >> accountNumber;
if (accountNumber == -1) {
break;
}
cout << "Enter name: ";
getline(cin, name);
cout << "\nEnter balance due:" << endl;
cin >> balanceDue;
cout << "\nAccount Number: " << accountNumber << endl
<< "Name: " << name << endl << endl;
displayColumnTitle();
paymentAmt = balanceDue * .10;
while (balanceDue != 0) {
balanceDue = calculateBalanceDue(balanceDue, paymentAmt);
displayBalance(month, balanceDue);
month++;
}
}
return 0;
}
Приносим извинения за беспорядочный код, поскольку я новичок.
Вы уверены, что 'accountNumber' должен быть переменной с плавающей запятой? На самом деле это не имеет особого смысла. –
Кроме того, из-за того, что значения с плавающей запятой работают на компьютерах, почти все операции с значениями с плавающей запятой приведут к ошибкам округления, которые усугубят больше операций, которые вы выполняете. Это означает, что вы можете получить * закрыть * до нуля для 'balanceDue', но не точно равным нулю. Пожалуйста, прочитайте [«Сбита с плавающей запятой?»] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken). –
oops you right it should int int – blionzion