为什么这段代码给我一个无限循环?

tem*_*boy 6 c++ loops infinite-loop

当我输入正确的值(整数)时,它是好的.但是当我输入一个角色时,我会得到一个无限循环.我查看了这段代码的每一面,但是找不到它的问题.为什么会这样?我在Windows上使用g ++ 4.7.

#include <iostream>
#include <limits>

int main()
{
    int n;
    while (!(std::cin >> n))
    {
        std::cout << "Please try again.\n";
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin.clear();
    }
}
Run Code Online (Sandbox Code Playgroud)

输入:x
输出:

在此输入图像描述

joh*_*ohn 6

这是因为您的恢复操作顺序错误.首先清除错误然后清除缓冲区.

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)