C++ c++;而loops会打印两次couts

C++ c++;而loops会打印两次couts,c++,while-loop,C++,While Loop,在我的代码中,while循环打印cout两次,而它应该打印cout一次,以及函数的cout。我不明白它为什么这样做——它应该显示出来 你想做什么 存款 撤回 取消 但是,它显示了两次 while (yesNo == 'Y') { cout << "What would you like to do?" << endl << endl; menu(); getli

在我的代码中,while循环打印cout两次,而它应该打印cout一次,以及函数的cout。我不明白它为什么这样做——它应该显示出来

你想做什么

存款

撤回

取消

但是,它显示了两次

while (yesNo == 'Y') {

        cout << "What would you like to do?"
            << endl
            << endl;

        menu();
        getline(cin, bankChoice);

        if (bankChoice == "Withdraw")
        {

            withdrawTotal = withdraw(bankAmount);
            bankAmount = withdrawTotal;
            cout << "You now have $"
                << bankAmount
                << " in your account."
                << endl;

            cout << "Would you like to do anything else?"
                << endl
                << "Y/N: ";
            cin >> yesNo;

        }

        if (bankChoice == "Deposit")
        {

            depositTotal = deposit(bankAmount);
            bankAmount = depositTotal;
            cout << "You now have $"
                << bankAmount
                << " in your account."
                << endl;

            cout << "Would you like to do anything else?"
                << endl
                << "Y/N: ";
            cin >> yesNo;
        }


        if (bankChoice == "Cancel") {
            return 0;
        }

    }
while(yesNo=='Y'){

您可以同时使用
std::getline
operator>
来读取
std::cin
operator>
不使用尾随的换行符,因此下次调用
std::getline
()将立即读取以下换行符,并将其解释为输入的空行文本。这将在循环中运行,并返回到顶部,以获得第二个提示

当您打算阅读一行文本时,切勿将
operator>
std::cin
一起使用

下面的简短示例演示了这一点:

#include <iostream>
#include <string>

int main()
{
    char c;
    std::string l;

    std::cin >> c;

    std::cout << "A line of text please: ";

    std::getline(std::cin, l);
}
#包括
#包括
int main()
{
字符c;
std::字符串l;
标准:cin>>c;

std::cout除了Sam的答案之外,我建议您在两个if语句之外提取通用功能:

std::string yesNo;

while (yesNo.compare("Y") == 0) {
    cout << "What would you like to do?"
        << endl
        << endl;

    menu();
    getline(cin, bankChoice);

    if (bankChoice == "Cancel")
        return 0;

    if (bankChoice == "Withdraw") {
        withdrawTotal = withdraw(bankAmount);
        bankAmount = withdrawTotal;
    }

    if (bankChoice == "Deposit") {
        depositTotal = deposit(bankAmount);
        bankAmount = depositTotal;
    }

    cout << "You now have $"
        << bankAmount
        << " in your account."
        << endl;

    cout << "Would you like to do anything else?"
        << endl
        << "Y/N: ";

    std::getline(std::cin, yesNo);
}
std::string yesNo;
而(是否比较(“Y”)==0){

难道
menu()
做了什么?要了解发生了什么,请输出
cin>
(作为int)@AndrewCheong'menu()的结果'仅显示存款、取款和取消行是否可以用cin替换?可能是存储的字符导致自动前进。请尝试在每次输入后清除输入缓冲区。请在a上多做一些工作。您显示了许多不相关的代码,而没有显示
菜单()
函数,该函数正好是错误发生的位置。