void dr1() {
int num1 = 0, num2 = 0;
char str[100];
while (str[0] != '|') {
cout << "Please enter two numbers (enter \"|\" to terminate): ";
cin >> num1;
cin >> num2;
cin.getline(str, 100);
cout << num1 << num2 << endl;
}
}
如果用户输入字符串,变量str
是否应该从输入缓冲区中读取它?
根据我所学到的,你不能将字符串字符输入int
类型,因此它们会留在缓冲区中。如果它们留在缓冲区中,不应该getline()
读取缓冲区中剩余的输入吗?
答案 0 :(得分:1)
如果operator>>
无法读取格式化值,则输入确实保留在缓冲区中,并且该流也将进入错误状态,因此后续读取将被忽略并且也会失败。这就是为什么getline()
没有按预期读取"|"
输入的原因。格式化读取操作失败后,您需要clear()
流的错误状态。例如:
void dr1()
{
int num1, num2;
char str[100];
do
{
cout << "Please enter two numbers (enter \"|\" to terminate): " << flush;
if (cin >> num1)
{
if (cin >> num2)
{
// use numbers as needed...
cout << num1 << num2 << endl;
continue;
}
}
cin.clear();
if (!cin.getline(str, 100)) break;
if (str[0] == '|') break;
}
while (true);
}