C++ 不理解c+中有流错误的程序流+;

C++ 不理解c+中有流错误的程序流+;,c++,C++,我是编程新手。这是一个程序设计:使用C++书籍的原理和实践,但对标准库有一点调整。在这个程序中,当我输入8*时,所有的东西突然关闭,没有任何异常。不引发任何异常的程序流是什么 代码如下: #include <iostream> #include <string> using namespace std; inline void open() { cin.clear(); cin.ignore(); cin.get(); } void skip

我是编程新手。这是一个程序设计:使用C++书籍的原理和实践,但对标准库有一点调整。在这个程序中,当我输入8*时,所有的东西突然关闭,没有任何异常。不引发任何异常的程序流是什么

代码如下:

#include <iostream>
#include <string>

using namespace std;

inline void open() {
    cin.clear();
    cin.ignore();
    cin.get();
}

void skip_to_int()
{
    if (cin.fail()) { // we found something that wasn’t an integer
        cin.clear(); // we’d like to look at the characters
        for (char ch; cin >> ch; ) { // throw away non-digits
            if (isdigit(ch) || ch == '-') {
                cin.unget(); // put the digit back,
                             // so that we can read the number
                return;
            }
        }
    }
throw runtime_error("no input"); // eof or bad: give up
}

int main(){

    try {
        cout << "Please enter an integer in the range 1 to 10 (inclusive):\n";
        int n = 0;
        while (true) {

            if (cin >> n) { // we got an integer; now check it
                if (1 <= n && n <= 10) {

                        break;
                }
                cout << "Sorry " << n
                    << " is not in the [1:10] range; please try again\n";
            }
            else {
                cout << "Sorry, that was not a number; please try again\n";
                skip_to_int();
            }
        }
    }
    catch (runtime_error& e) {
        cerr << e.what() << endl;
    }

        open();

}
#包括
#包括
使用名称空间std;
内联void open(){
cin.clear();
cin.ignore();
cin.get();
}
void skip_to_int()
{
如果(cin.fail()){//我们发现了一些不是整数的东西
cin.clear();//我们想看看字符
对于(char-ch;cin>>ch;){//丢弃非数字
if(isdigit(ch)| | ch='-'){
cin.unget();//将数字放回原处,
//这样我们就可以读取数字了
返回;
}
}
}
抛出运行时_错误(“无输入”);//eof或错误:放弃
}
int main(){
试一试{
cout>n){//我们得到了一个整数;现在检查它

如果(1)当我输入8*作为输入时,程序会打印一个
heredone!
。我看不出有任何理由期望出现错误。
尝试
->
,而
->
如果
->
如果
中断
C++I/O错误不会抛出异常,除非您明确启用它们。实际上,如果您想学习编程,就不要学习fStroustrup的书——他不是一个好老师,而且可以不学习C++作为你的第一语言——学习Python。@ LakSayayGg第一部分被纠正了。对于你的答案的第二部分,我们想输入一个1到10之间的数字,但是8 *不是1到10之间的数字,但是这个程序接受它。我怎样修改我的程序才能得到正确的RE?“阿米塔瓦科利看了这个问题,你的评论很相似。”NeilButterworth感谢你的评论。我对编程并不完全陌生。我已经用Pyton编程了,但我没有了解到Pyton的细节,现在我想详细研究C++。你有什么建议来研究C++?