由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循环语句去掉这个缓冲区里的东西

浙公网安备 33010602011771号