由if(!cin)引出的关于cin和抽取运算符>>本质的探究

上一节文章中提到了
 1 for (i = 0;i < limit; i++)
 2     {
 3         cout << "Enter value #" << (i + 1) << ":";
 4         cin >> temp;
 5         if (!cin)
 6         {
 7             cin.clear();
 8             while (cin.get() != '\n') continue;
 9             cout << "Bad input; input process terminated.\n";
10             break;
11         }
12         else if (temp < 0) break;
13         ar[i] = temp;
14     }
其中if (!cin)一句往后都不太理解,查阅资料后可知:
1.在看到“cin>>”时我们会输入一串字符,这串字符会被放到输入流中,而抽取运算符>>会采取单字符读取模式一个个将输入流中的字符,
当输入的是如12345a4的时候,若temp如果是个int型则会一字符一字符的读取到a,然后就会卡住,哪怕下一次使用cin时a仍然在缓冲区出不来,需要clear清除但是这个clear清除的是流状态(即将流状态badbit, failbit, eofbit置零)a本身还是在缓冲区,然后又要通过下面的while循环语句去掉这个缓冲区里的东西
posted @ 2022-05-09 19:53  卷卷卷卷出一片天  阅读(96)  评论(0)    收藏  举报