一般来说,if条件判断的格式如下,逻辑是非常清楚的。因为if的条件判断通常为布尔值,或者是最终运算结果为布尔值的表达式。但是当判断条件中包含了cin>>函数时,我的逻辑就显得有点混乱了。
以下是一个if的判断条件为cin>>是否为空的例子,简单地梳理了一下逻辑:
一、首先,要知道cin>>的特性:
1.cin从缓冲区读取数据时是从第一个非空白符开始的,若第一个字符是分隔符那么cin>>会将其忽略并清除!
2.cin>>以“空格、回车、tab”作为分隔符,若成功读入后出现分隔符,那么分隔符后面的内容将在缓冲区内,本次不读入。
3.cin只要读入了数据就返回true(实际上返回的是cin>>,因此在vs中若要与0比较需要做一个强制类型转换),否则返回false(Ctrl+z表示结束输入)
二、了解了cin>>的一些特性后我们来梳理上图的代码逻辑
每循环一次,都先执行判断if中的条件一次,程序执行直观体现出来的就是:用户需要输入字符串,然后ctrl+z结束后,自动输出了单词个数和长度,很容易让人误以为是一步完成的。但是,实际上是在一次次while循环下计算出来的count和length。用户每输入一个单词,用分隔符分隔后,if条件判断不为0,因此执行count++和length+;输入下一个单词其实已经进入下一次循环的cin>>了。