这是我第一次尝试使用C ++,下面是一个通过控制台应用程序计算提示的示例。完整(工作代码)如下所示:
// Week1.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Declare variables
double totalBill = 0.0;
double liquour = 0.0;
double tipPercentage = 0.0;
double totalNoLiquour = 0.0;
double tip = 0.0;
string hadLiquour;
// Capture inputs
cout << "Did you drink any booze? (Yes or No)\t";
getline(cin, hadLiquour, '\n');
if(hadLiquour == "Yes") {
cout << "Please enter you booze bill\t";
cin >> liquour;
}
cout << "Please enter your total bill\t";
cin >> totalBill;
cout << "Enter the tip percentage (in decimal form)\t";
cin >> tipPercentage;
// Process inputs
totalNoLiquour = totalBill - liquour;
tip = totalNoLiquour * tipPercentage;
// Output
cout << "Tip: " << (char)156 << tip << endl;
system("pause");
return 0;
}
这很好用。但是,我想搬家:
cout << "Please enter your total bill\t";
cin >> totalBill;
成为第一行:
// Capture inputs
但是当我执行应用程序中断时(它编译,但只是忽略if语句,然后立即打印两个cout。
我抓挠我的脑袋因为我无法理解发生了什么 - 但我假设我是个白痴!
由于
答案 0 :(得分:6)
试试这个
// Capture inputs
cout << "Please enter your total bill\t";
cin >> totalBill;
cin.clear();
cin.sync();
请参阅c++ getline() isn't waiting for input from console when called multiple times
或者,最好还是不要使用getline:
cout << "Please enter your total bill\t";
cin >> totalBill;
cout << "Did you drink any booze? (Yes or No)\t";
cin >> hadLiquour;
答案 1 :(得分:1)
totalBill
是一个数字,即程序“消耗”输入中的所有数字。假设您输入了:
42.2 [返回]
42.2被复制到totalBill
。 [RETURN]不匹配,并保留在输入缓冲区中。
现在,当你拨打getline()
时,[返回]仍然坐在那里......我相信你可以从那里找出其余部分。
答案 2 :(得分:0)
Cin不会从流中删除换行符或进行类型检查。因此,使用cin>>var;
并使用其他cin >> stringtype;
或getline();
进行跟踪将获得空输入。最好的做法是 NOT MIX 来自cin的不同类型的输入法。
[有关更多信息,请参阅link]
您可以更改以下代码:
cout << "Please enter your total bill\t";
getline(cin, hadLiquour); // i used the hadLiquour string var as a temp var
// so don't be confused
stringstream myStream(hadLiquour);
myStream >> totalBill;