84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
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<std::streamsize>::max(), '\n');
通常这样把第一个参数设置得足够大,使得实际只有第二个参数'\n'起作用,这样便可以把回车前的输入字符从输入缓冲流中擦除。然后便尝试进行读取下次的输入。
if (!cin) { cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::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
就是判断输入流是否正常。