这段代码中的输入验证有什么问题?

问题描述

注意:这是 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 (将#修改为@)