我正在尝试使用C ++程序将用户输入输出到空文件中。但是,在输入浮点数后,程序通过调用下一个会话来结束当前的输入会话。以下是用户输入功能的代码。
vector<Item> insertProducts()
{
vector<Item> products;
string name;
string code;
float price;
string unit;
bool repeat = true;
while(repeat) // program will keep asking for another round of input after one session ends
{
cout << "Enter product description: ";
getline(cin, name);
if(name.compare("#") != 0) // program stop asking for input if # is entered
{
cout << "Enter product code: ";
getline(cin, code);
cout << "Enter product unit price: ";
cin >> price;
cout << "Enter product unit phrase: ";
getline(cin, unit);
cout << "" << endl;
Item newProduct = Item(code, name, price, unit);
products.push_back(newProduct);
}
else
{
repeat = false;
printCatalog(products);
}
}
return products;
}
下面是输入浮动价格后的结果,程序跳过单位短语的输入并右转进入另一轮输入。
Enter product description: Potato Chips
Enter product code: P3487
Enter product unit price: 1.9
Enter product unit phrase: Enter product description:
我可以知道导致此问题的原因以及如何解决?
答案 0 :(得分:2)
你的问题是在cin >> price;
之后,用户用来终止价格输入的换行符仍在输入缓冲区中 - 它是下一个要读取的字符。然后,以下std::getline
读取它并返回一个空行。
清除这种尾随换行符最强大的方法是告诉流忽略所有内容,包括下一个换行符:
cin >> price;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
答案 1 :(得分:0)
使用
cin.ignore();
在调用getline()函数之前
或者,您可以尝试使用
cin.clear();
cin.sync();
代码的开头
这将刷新输入缓冲区。