从输入缓冲区读取
Posted
技术标签:
【中文标题】从输入缓冲区读取【英文标题】:Reading from input buffer 【发布时间】:2018-05-29 20:29:13 【问题描述】: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()
不应该读取缓冲区中留下的任何输入吗?
【问题讨论】:
您是在问num
读取是否失败,线路读取不应该消耗线路并继续前进吗?如果是这样,则需要在getline之前重置流状态,并且在这样做之前需要检测失败。
这可能是你需要的:***.com/questions/10828937/…
当您需要根据用户输入的内容执行不同的操作时,最好的选择是逐行读取输入并使用std::istringstream
处理每一行。 @NathanOliver 发布的链接是一个很好的起点。
【参考方案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);
【讨论】:
以上是关于从输入缓冲区读取的主要内容,如果未能解决你的问题,请参考以下文章