如何解决这段代码中的输入验证有什么问题?
注意:这是 Tony Gaddis 所著的从 C++ 第九版开始一书中的编程挑战 #9 第 6 章。
假设您想将一定数量的钱存入一个储蓄账户,然后不理会它,以便在接下来的 10 年中提取利息。在 10 年结束时,您希望帐户中有 10,000 美元。您今天需要存入多少钱才能实现这一目标?您可以使用以下公式,即现值公式来找出。
公式:P = F / (1 + r)^n
公式中的项如下:
- P 是现值,或您今天需要存入的金额。
- F 是您希望帐户中的未来价值。
- r 是年利率
- n 是您计划将钱存入帐户的年数。
编写一个程序,该程序具有一个名为 presentValue 的函数来执行此计算。该函数应接受未来值、年利率和年数作为参数。它应该返回现值,即您今天需要存入的金额。在程序中演示该函数,让用户体验公式项的不同值。
问题: 所以我这段代码的问题是输入验证,正如你所看到的,我使用了一个 do while 循环来验证 userChoice 输入,它至少会迭代一次,并保持只要 userChoice 变量不等于字符“Y”或“y”,就进行迭代。但是,即使我输入 Y 或 y,即使我在要求字符选择时使用 cin.ignore() 函数,程序也不会结束。我将添加更多测试负数输入的函数,但现在我需要知道如何解决此代码中的错误才能继续。提前致谢!
#include <iostream>
#include <cmath>
#include <iomanip>
double presentValue(double,double,double);
int main()
{
double futureValue,interestRate,numberOfYears,P;
char userChoice;
std::cout << std::setprecision(2) << std::fixed << std::showpoint;
do
{
std::cout << "What is the future value: _\b";
std::cin >> futureValue;
std::cout << "What is the annual interest rate: _\b";
std::cin >> interestRate;
std::cout << "What is the number of years: _\b";
std::cin >> numberOfYears;
P = presentValue(futureValue,numberOfYears);
std::cout << "The present value should be: $" << P << std::endl;
std::cout << "\nDo you want to quit the program (Y | N)? ";
std::cin >> userChoice;
std::cin.ignore();
std::cout << '\n';
} while(userChoice != 'Y' || userChoice != 'y');
std::cout << "\nYou quit the program\n";
return 0;
}
/************************
* Present value formula *
*************************/
double presentValue(double F,double r,double n)
{
double P = F / pow((1 + r / 100.00),n);
return P;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。