c++ primer 1.44 if 语句 例题 不解

2016-07-25 01:07:58 +08:00
 maosengshulei

#include <iostream>

int main() { // currVal is the number we're counting; we'll read new values into val

int currVal = 0, val = 0;

// read first number and ensure that we have data to process
if (std::cin >> currVal) {        
	int cnt = 1;  // store the count for the current value we're processing
	while (std::cin >> val) { // read the remaining numbers 
		if (val == currVal)   // if the values are the same
			++cnt;            // add 1 to cnt 
		else { // otherwise, print the count for the previous value
			std::cout << currVal << " occurs " 
			          << cnt << " times" << std::endl;
			currVal = val;    // remember the new value
			cnt = 1;          // reset the counter
		}
	}  // while loop ends here
	// remember to print the count for the last value in the file
	std::cout << currVal << " occurs " 
	          << cnt << " times" << std::endl;
} // outermost if statement ends here
return 0;

}

源码如上 为何自己运行时最后一个数无法输出啊?

1610 次点击
所在节点    问与答
3 条回复
zpole
2016-07-25 02:04:24 +08:00
while 没有退出
maosengshulei
2016-07-25 08:47:13 +08:00
意思是运行时输入完一串数后要输入 ctrl+z 才能结束是吗
aprikyblue
2016-07-25 10:19:47 +08:00
> while(std::cin>>val)

operator>>返回结果为 std::cin 本身,然后其通过类型转换来进行 if 判断
正常输入是一直为 true
当 ctrl+z 输入 EOF ,使得 cin 流状态变为无效,然后求值变为 false ,此时 while 退出
cin.clear()可以重新将 cin 置为有效

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX