P19上,有一段代码如下:
#include <iostream>
int main()
{
int sum = 0, value;
// read till end-of-file, calculating a running total of all values read
while (std::cin >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
这段代码虽然简单,但在看while (std::cin >> value)时,仍然觉得有些东西值得思考。
目前,在这一章书上有讲到 std::cin >> value 返回值是一个 std::cin 对象。故输入有效时,返回 std::cin ,而输入无效或是end-of-file字符时,返回的可能是个null或是一个逻辑值为false的值。
而我好奇的便是,输入空格的时候是什么情况?因为空格似乎很特殊,既不是end-of-file;在该段代码中,也不是有效值。
待读完第八章,The IO Library后,终于有了一个很好的认识。
使用cin就暗含了,以空格作为分隔符(准确的说是White space)。举个例子:
string s;
while(cin >> s)
cout << s << endl;
对于该段代码,若输入Hello World(Hello和World中有空格,或者制表符)。则输出为:
Hello
World
等价于,输入Hello后回车,然后输入World。这就是因为cin将White space当作一个结束标志。
若希望通过标准输入流输入空格或者制表符,需要用getline(cin, s)函数。而不要使用 >> operator。