关于输入流作为循环条件的问题(有没有输入输出方面书籍的推荐?)

这是我的代码:

    int n;
    while (cin >> n)
    {
        if (cin.eof())
            cout << "到达文件末尾" << endl;
        if (cin.fail())
            cout << "输入错误" << endl;
        if (cin.bad())
            cout << "输入流崩溃" << endl;
        if (cin.good())
            cout << "输入流正常" << endl;
        cout << n << endl;
    }
    cout << "结束循环" << endl;
    if (cin.eof())
        cout << "到达文件末尾" << endl;
    if (cin.fail())
        cout << "输入错误" << endl;
    if (cin.bad())
        cout << "输入流崩溃" << endl;
    if (cin.good())
        cout << "输入流正常" << endl;
    cout << n << endl;
    return 0;

我输入 3.0 之后的结果:

为什么在循环里内,输入流还是正常,结束循环后就错误了呢?而且值也变为0了。

最后,有没有关于输入输出方面的书或资料的推荐呢?《c++primer》上讲的不是很多。

感谢!

你输入 “30”,  “abc”,  “3.0”, 分别会出现什么结果,可以自己分析一下。

当我输入”3.0“,时候,应该只是读入了“3”,此时流正常;下个循环遇到“.”,流错误,跳出循环,并且流的值被重置为0?