怎么从这个 while 循环里出来?

2018-02-13 22:39:24 +08:00
 GromHellscream

原帖: https://stackoverflow.com/questions/14208069/how-to-read-output-of-a-vectorstring-with-a-certain-number-of-words-to-a-line

我自己运行这段程序,会一直卡在这个 while 循环中无限 cin,不出来。 下面的回答中也没提到这个问题,大概率是我姿势水平不高的问题。 c++新手上路,希望各位指点迷津,谢谢。

2979 次点击
所在节点    C
20 条回复
GromHellscream
2018-02-13 22:39:55 +08:00
clarkok
2018-02-13 22:42:34 +08:00
按 ctrl+c 可破

你需要给这个 cin 发一个 eof,才能让 cin >> words 返回的 std::istream 的 operator bool() 返回 false。我记得不是 ctrl+c 就是 ctrl+z 就是 ctrl+d
GromHellscream
2018-02-13 22:47:39 +08:00
<blockquote class="imgur-embed-pub" lang="en" data-id="a/BiCxT"><a href="//imgur.com/BiCxT"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
GromHellscream
2018-02-13 22:48:05 +08:00
GromHellscream
2018-02-13 22:48:49 +08:00
这直接产生 signal,程序无法执行下去了呀?
@clarkok
GromHellscream
2018-02-13 22:51:23 +08:00
SOF 那题目描述中有这么一句 “ I can store in vector and change all words to uppercase no problem.” 这代码运行起来根本不能 store strings in vector 啊!还是我想错了......
@clarkok
wallriding
2018-02-13 22:58:24 +08:00
我试着回答下吧
因为你的循环条件是 cin 的返回值,就是只要你输入的是一个有效字符串,就会一直循环下去
然而我们都知道用键盘输入的肯定是有效的字符串,所以就无限 cin
所以你需要另外指定条件来跳出循环

所以:你希望读取到什么时候停止这个循环呢?
比如是 1. 读到换行符就停止? 2. 读到空行就停止? 3. 还是读取到了一定数量的词就停止?
随便选一个就行
个人觉得就选 3 就好,先读一个数字,然后再读那个数量的词
LGA1150
2018-02-13 23:04:32 +08:00
EOF
billchenchina
2018-02-13 23:05:43 +08:00
可以重定向输入到文件
Windows 的话 Ctrl-Z 也可以
GromHellscream
2018-02-13 23:06:43 +08:00
@wallriding 谢谢您的回答,我自己的想法也是和您一样,是第三个想法。但是我发现 SOF 这问题下面没一个人提出这个问题的,这就挺奇怪的......
oooxxx
2018-02-13 23:07:55 +08:00
Unix terminal 下,可以 Ctrl-D 生成 EOF
wallriding
2018-02-13 23:11:43 +08:00
@GromHellscream #10 回答者都没 get 问题的点( cin ),都在说如何一行打印 8 个单词
GromHellscream
2018-02-13 23:18:19 +08:00
@oooxxx 原来如此,谢谢。
GromHellscream
2018-02-13 23:19:31 +08:00
@wallriding 是的呀,他们应该都会看一下这个题主提供的代码呀,看到 while loop 这句就没觉得有什么不对吗? 唉...... 心累。
50infivedays
2018-02-13 23:23:48 +08:00
@oooxxx #11 赞同
msg7086
2018-02-14 00:29:33 +08:00
EOF
Windows 下用 Ctrl-Z,Linux 下用 Ctrl-D。
secondwtq
2018-02-14 01:16:55 +08:00
这东西稍微玩一点 oj 就知道了
Sayhey5
2018-02-14 11:49:58 +08:00
@msg7086 这个正解
GromHellscream
2018-02-14 13:08:23 +08:00
@msg7086 谢谢,那我去查查 Mac 上怎么操作。
CokeMine
2018-02-17 13:17:23 +08:00
一般不应该判断比如读到一个#就 break 的吗 233

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

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

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

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

© 2021 V2EX