所以我一直在对这个程序进行故障排除,之前我已经问过这个问题。我认真对待了其他人的建议并将其应用到我的程序中,但它仍然无效。这是修改后的(虽然缩短了)代码:
#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 ++而言,我是一名新程序员,所以任何帮助都会受到赞赏。
答案 0 :(得分:4)
cin.clear()
清除错误标志,并在缓冲区中保留输入余额后面的行的剩余内容。您需要可以致电cin.ignore()
来正确处理此问题。
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 1 :(得分:1)
您正在将流提取运算符与getline
混合使用。在您的示例中,std::cin>>withdraw
在用户输入"50"
时获得字符串"50\n"
。下一个getline
只会获得"\n"
,这就是您提示两次("\n"
!= "quit"
)的原因。
您可以通过以下几种方式解决此问题:使用getline
获取所有内容并从每行获取所需内容,在getline
之后调用cin>>
以使下一个读取操作开始在下一行,或者,正如Oblivious船长建议的那样,使用cin.ignore
。