关于while (std::cin >> val) 的一些思考

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值