2

所以我一直在对这个程序进行故障排除,我之前已经问过有关它的问题。我已经认真对待其他人的建议并将其应用到我的程序中,但它仍然无法正常工作。这是修改后的(尽管缩短了)代码:

#include <iostream>
#include <string>

double balance, withdraw, deposit;
std::string choice;

void withdrawmon()
{
    balance -= withdraw;
}
void depositmon()
{
    balance += deposit;
}

int main()
{
    std::cout << "Welcome to the Bank Program." << std::endl;
    std::cout << "Enter a starting balance: ";
    std::cin >> balance;
    std::cin.clear();
    do
    {
        std::cout << "Withdraw, deposit, or quit: ";
        std::getline (std::cin, choice);
        if(choice == "withdraw")
        {
            std::cout << "Enter amount to withdraw: ";
            std::cin >> withdraw;
            withdrawmon();
            std::cout << "Your current balance is $" << balance << std::endl;
        }
        else if(choice == "deposit")
        {
            std::cout << "Enter amount to deposit: ";
            std::cin >> deposit;
            depositmon();
            std::cout << "Your current balance is $" << balance << std::endl;
        }
    }
    while(choice != "quit");
    std::cout << "Thanks for using the Bank Program. Your final balance was $" << balance << std::endl;
    return 0;
}

不会有问题,代码运行了,但是输出是这样的: https ://www.dropbox.com/s/aocn6asjr4ofcws/Broken%20Output.PNG

正如您所看到的,每当循环重新启动时,“取款、存款或退出:”行都会自行打印两次。有谁知道为什么?任何帮助表示赞赏。就 C++ 而言,我是一名新程序员,因此不胜感激。

4

2 回答 2

4

cin.clear()清除错误标志并将输入余额之后的行的剩余内容留在缓冲区中。您需要可以调用cin.ignore()以正确处理此问题。

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
于 2013-08-02T04:16:56.943 回答
1

您正在将流提取运算符与getline. 在您的示例中,当用户输入时std::cin>>withdraw获取字符串。下一个只是得到,这就是为什么你得到两次提示(!= )。"50""50\n"getline"\n""\n""quit"

您可以通过以下几种方式解决此问题:要么使用getline所有内容并从每一行中获取您需要的内容,getline在您之后调用cin>>以使下一个读取操作从下一行开始,或者如无视队长建议的那样,使用cin.ignore.

于 2013-08-02T04:20:06.303 回答