cin后c ++不能有cin.ignore()?

时间:2018-02-12 16:47:03

标签: c++

我在使用cin.ignore()时遇到问题,如果我在cin>>之后使用它声明它似乎不起作用,而是结束程序。 这是我的代码:

#include "stdafx.h"
#include <iostream>
using namespace std;
int number ;
int main () {
    cin >> number;
    cout << number;
    cin.ignore()
    return 0;
}

我在提示符下输入“4”(没有引号)。我希望它提示输入一个int(它确实如此),然后显示该int,直到用户再次按下Enter键。但是,只要我在第一个提示符处按Enter键,程序就会关闭。如果我用新的cin&gt;&gt;替换cin.ignore()然后它等到我在关闭之前在该提示下输入数据,但是这样我必须将数据放入提示中,我不能只按Enter键关闭它。

我读过关于在cin输入之后输入cin.clear()但是没有帮助。如果我用cin&gt;&gt;替换cin.ignore() NUM2;然后它工作正常。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您的用户未输入有效的int类型作为输入,则可以重置输入流并忽略其余部分。在while包含实际整数之前,number循环不会退出。之后,如果您希望程序等到用户按下&#34;输入&#34;或任何其他密钥,您只需再次致电ignore

#include <limits>
#include <iostream>    

int main()
{
    int number;
    // we need to enforce that the input can be stored as `int` type
    while(!(std::cin >> number))
    {
        std::cout << "Invalid value! Please enter a number." << std::endl;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    std::cout << "Your number is: " << number << std::endl;

    // wait for user to press Enter before exiting
    // you can do this with ignore() x2 once for the newline
    // and then again for more user input
    std::cout << "Press Enter to exit." << std::endl;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

    return 0;
}