由“使用istream对象作为条件判断”所引发的一些问题

1 #include <iostream>
2 int main()
3 {
4     int sum = 0, value;
5     while (std::cin >> value)
6         sum += value; // equivalent to sum = sum + value
7     std::cout << "Sum is: " << sum << std::endl;
8     return 0;
9 }

 

while的条件,std::cin >> value  ,它具有从标准输入读取下一个数并且将读入的值保存在 value 中的效果。输入操作符返回其左操作数。

/*------------------------ 华丽的分割线 ----------------------------*/

关于操作符,有一点还要注意:

  C++ 中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值。当操作符是输出操作符时,结果是左操作数的值。也就是说,输出操作返回的值是输出流本身。

既然输出操作符返回的是其左操作数,那么我们就可以将输出请求链接在一起(这也是我们通常选择的写法)。
  std::cout << "Enter two numbers:" << std::endl;
  这样的语句等价于
  (std::cout << "Enter two numbers:") << std::endl;

因为((std::cout << "Enter two numbers:"))返回其左操作数 std::cout,所以,这条语句也等价与
  std::cout << "Enter two numbers:";
      std::cout << std::endl;

而 endl 是一个特殊值,称为操纵符,(注意你没有看错,这个不是操作符!)将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。

/*------------------------ 华丽的分割线 ----------------------------*/

while 条件测试输入操作符的返回结果,意味着测试 std::cin

当我们使用 istream 对象作为条件,结果是测试流的状态。(人工擦汗-ing,之前我竟然没注意到这个,看来今天又长知识了!O(∩_∩)O哈哈~)

如果流是有效的(也就是说,如果读入下一个输入是合法有效的)那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则 istream 对象是无效的。处于无效状态的 istream 对象将导致条件失败。

 

 

posted @ 2013-03-07 13:10  HandsomeDragon  阅读(679)  评论(0)    收藏  举报