84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
if(! cin ) 是什么意思,有什么作用,应该怎么用
光阴似箭催人老,日月如移越少年。
在std::basic_ios中定义了operator bool:
std::basic_ios
operator bool
explicit operator bool() const; //C++11
所以如果对标准IO流进行形如if (!cin)的bool判断时,便会调用operator bool,其返回的结果将会作为if的判断条件。于是当cin输入流出现错误时,if (!cin)中的条件会被判断为真,此时可以调用cin.clear()来重置流的状态,同时调用cin.ignore()来清除输入缓冲区中的内容,来消除上次输入对下次输入的影响,常见做法为:
if (!cin)
bool
cin
cin.clear()
cin.ignore()
cin.ignore(std::numeric_limits::max(), '\n');
通常这样把第一个参数设置得足够大,使得实际只有第二个参数'\n'起作用,这样便可以把回车前的输入字符从输入缓冲流中擦除。然后便尝试进行读取下次的输入。
if (!cin) { cin.clear(); cin.ignore(std::numeric_limits::max(), '\n'); continue; }
cin是输入流,!cin就是判断输入流是否正常。
!cin
在
std::basic_ios
中定义了operator bool
:所以如果对标准IO流进行形如
if (!cin)
的bool
判断时,便会调用operator bool
,其返回的结果将会作为if的判断条件。于是当
cin
输入流出现错误时,if (!cin)
中的条件会被判断为真,此时可以调用cin.clear()
来重置流的状态,同时调用cin.ignore()
来清除输入缓冲区中的内容,来消除上次输入对下次输入的影响,常见做法为:通常这样把第一个参数设置得足够大,使得实际只有第二个参数'\n'起作用,这样便可以把回车前的输入字符从输入缓冲流中擦除。然后便尝试进行读取下次的输入。
cin
是输入流,!cin
就是判断输入流是否正常。