1 #include2 int main()3 {4 int sum = 0, value;5 while (std::cin >> value)6 sum += value; // equivalent to sum = sum + value7 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 对象将导致条件失败。