C++ C++;结束迭代而不是循环

C++ C++;结束迭代而不是循环,c++,C++,我想运行并检查一个循环,如果无效,则跳出该循环并从我请求输入的循环开始处开始 close = false; int direction while (!close){ if (!(cin >> direction)){ cout << "not valid: " << endl; continue; } close = true; } 它也不起作用。我知道代码的整个部分都可以更好,但我刚开始用C++,

我想运行并检查一个循环,如果无效,则跳出该循环并从我请求输入的循环开始处开始

close = false;
int direction
while (!close){

    if (!(cin >> direction)){
        cout << "not valid: " << endl;
        continue;
    }
    close = true;
}

它也不起作用。我知道代码的整个部分都可以更好,但我刚开始用C++,我试图理解为什么它不能像我预期的那样工作。< /P> < P>为什么不使用while循环?< /P>
while(! (cin >> x)) {
    cout << "invalid input " << endl;
}
while(!(cin>>x)){

CUT流是一个错误状态,它忽略了进一步的输入。您需要“代码>清除/代码>,并且消耗任何缓冲的字符。而不是布尔变量和<代码>继续<代码>,考虑一个<代码>(true)和一个<代码>破解< /代码>;-甚至更好(以我个人的观点,但我可以论证)。考虑“<代码> >(<;)<代码> >而不是<代码> >(true)。写的更少,可能更容易被识别,也不会导致一个编译器发出Sim-Walue。抱歉,对于我的懒惰,我今天不想再写同样的答案。请在这里请求之前研究更多。ῥεῖ: 问题是为什么你今天只写了一次答案,而同一个问题有一千个更好的答案。@πάνταῥεῖ 你发布的答案中有一条经过投票的评论,上面写着“@user2546419是的,在出现错误后,cin会立即返回,而不做任何事情。——Galik 8小时”如果是这样的话,它会返回并且仍然进入循环。我不知道你标记的问题是如何回答我的问题的,它只是一个解决方案,而不是一个解释,我想理解代码。这可能是一个评论。这不是答案。考虑删除它,并把它作为评论写下来。
while(! (cin >> x)) {
    cout << "invalid input " << endl;
}