首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cin不等待输入,尽管有cin.ignore()

Cin不等待输入,尽管有cin.ignore()
EN

Stack Overflow用户
提问于 2016-12-18 19:47:45
回答 3查看 1.4K关注 0票数 2

我是C++新手,我正在使用2015。

cin不是在"Please enter another integer:\n"之后等待输入,而是每次输出"You entered 0"

我已经在互联网上搜索了一个多小时,没有一个解决方案。cin.ignore()的组合不起作用。为什么cin缓冲区仍未清除?

代码语言:javascript
复制
#include <iostream>
#include <vector>
using namespace std;

int main() {
        vector<int> vals;
        int val = 0;
        int n = 0;

        cout << "Please enter some integers (press a non-numerical key to stop)\n";
        while (cin >> val)
            vals.push_back(val);        

        cin.ignore(INT_MAX, '\n');
        cin.ignore();

        cout << "Please enter another integer:\n";

        cin.ignore();

        cin >> n;
        cout << "You entered " << n;

        system("pause");
        return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-18 20:10:06

问题在于用户退出循环时,需要将cin置于失败状态。这就是为什么你

代码语言:javascript
复制
while(cin >> val){ .... }

起作用了。

如果处于失败状态,cin将不再为您提供输入,因此您需要清空()失败状态。您还需要忽略()最初触发失败状态的以前的非整数响应。

使用它也是有价值的。

代码语言:javascript
复制
if(cin >> n){
    cout << "You entered " << n;
}

这将断言为n提供了适当的输入。

票数 2
EN

Stack Overflow用户

发布于 2016-12-18 20:09:59

程序中的问题是,它需要整数,而用户可以输入任何东西,比如一个非整数字符。

一个更好的方法,你似乎想做的是,一个一个字符,忽略空格,如果它是一个数字,然后继续阅读得到整个数字,否则停止循环。然后,您可以阅读所有字符,直到您到达'\n',并对一个数字执行相同的操作。在这样做的同时,对于每个字符,您应该检查流中仍然有cin.eof()中的字符。

另外,您可以通过在终止应用程序之前请求最后一个字符来防止命令行窗口关闭,而不是使用system(“暂停”)。

票数 0
EN

Stack Overflow用户

发布于 2016-12-18 20:28:40

试着得到这样的整数:

代码语言:javascript
复制
#include <sstream>

...
fflush(stdin);
int myNum;
string userInput = "";

getline(cin, userInput);
stringstream s (userInput);
if (s >> myNum) // try to convert the input to int (if there is any int)
    vals.push_back(myNum);

如果没有sstream,就必须使用try catch,这样当输入不是整数时,程序就不会崩溃。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41212202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档