我正在尝试从控制台获取几个用户输入的参数,包括两个字符串、两个整数和一个浮点数。我试图使用的相关代码如下:
然而,当运行程序时,代码并不等待第一个inputString被输入,而是直到第二个getline()调用才停止。因此,控制台输出看起来像这样:
标题:类别:
光标出现在类别之后。如果我现在输入,程序会跳到年份输入,不允许我输入多个字符串。这里发生了什么?
#include <string>
#include <iostream>
using namespace std;
// ...
string inputString;
unsigned int inputUInt;
double inputDouble;
// ...
cout << "Title: ";
getline(cin, inputString);
tempDVD.setTitle(inputString);
cout << "Category: ";
getline(cin, inputString);
tempDVD.setCategory(inputString);
cout << "Duration (minutes): ";
cin >> inputUInt;
tempDVD.setDuration(inputUInt);
cout << "Year: ";
cin >> inputUInt;
tempDVD.setYear(inputUInt);
cout << "Price: $";
cin >> inputDouble;
tempDVD.setPrice(inputDouble);
然而,当运行程序时,代码并不等待第一个inputString被输入,而是直到第二个getline()调用才停止。因此,控制台输出看起来像这样:
标题:类别:
光标出现在类别之后。如果我现在输入,程序会跳到年份输入,不允许我输入多个字符串。这里发生了什么?
getline()
。 - Kerrek SBgetline()
时,很容易得到意外的结果。我并不是说这是不可能的,但通常会使逻辑非常难以阅读和维护。 - Kerrek SB