首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C/C++/Obj-C

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

  •  
  •   GromHellscream · 155 天前 · 1261 次点击
    这是一个创建于 155 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    20 回复  |  直到 2018-02-17 13:17:23 +08:00
        1
    GromHellscream   155 天前
        2
    clarkok   155 天前 via Android
    按 ctrl+c 可破

    你需要给这个 cin 发一个 eof,才能让 cin >> words 返回的 std::istream 的 operator bool() 返回 false。我记得不是 ctrl+c 就是 ctrl+z 就是 ctrl+d
        3
    GromHellscream   155 天前
    <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>
        5
    GromHellscream   155 天前
    这直接产生 signal,程序无法执行下去了呀?
    @clarkok
        6
    GromHellscream   155 天前
    SOF 那题目描述中有这么一句 “ I can store in vector and change all words to uppercase no problem.” 这代码运行起来根本不能 store strings in vector 啊!还是我想错了......
    @clarkok
        7
    wallriding   155 天前
    我试着回答下吧
    因为你的循环条件是 cin 的返回值,就是只要你输入的是一个有效字符串,就会一直循环下去
    然而我们都知道用键盘输入的肯定是有效的字符串,所以就无限 cin
    所以你需要另外指定条件来跳出循环

    所以:你希望读取到什么时候停止这个循环呢?
    比如是 1. 读到换行符就停止? 2. 读到空行就停止? 3. 还是读取到了一定数量的词就停止?
    随便选一个就行
    个人觉得就选 3 就好,先读一个数字,然后再读那个数量的词
        8
    LGA1150   155 天前
    EOF
        9
    billchenchina   155 天前 via Android
    可以重定向输入到文件
    Windows 的话 Ctrl-Z 也可以
        10
    GromHellscream   155 天前
    @wallriding 谢谢您的回答,我自己的想法也是和您一样,是第三个想法。但是我发现 SOF 这问题下面没一个人提出这个问题的,这就挺奇怪的......
        11
    oooxxx   155 天前   ♥ 1
    Unix terminal 下,可以 Ctrl-D 生成 EOF
        12
    wallriding   155 天前
    @GromHellscream #10 回答者都没 get 问题的点( cin ),都在说如何一行打印 8 个单词
        13
    GromHellscream   155 天前
    @oooxxx 原来如此,谢谢。
        14
    GromHellscream   155 天前
    @wallriding 是的呀,他们应该都会看一下这个题主提供的代码呀,看到 while loop 这句就没觉得有什么不对吗? 唉...... 心累。
        15
    50infivedays   155 天前
    @oooxxx #11 赞同
        16
    msg7086   155 天前   ♥ 1
    EOF
    Windows 下用 Ctrl-Z,Linux 下用 Ctrl-D。
        17
    secondwtq   155 天前
    这东西稍微玩一点 oj 就知道了
        18
    Sayhey5   154 天前 via Android
    @msg7086 这个正解
        19
    GromHellscream   154 天前
    @msg7086 谢谢,那我去查查 Mac 上怎么操作。
        20
    CokeMine   151 天前 via Android
    一般不应该判断比如读到一个#就 break 的吗 233
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   1504 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 00:14 · PVG 08:14 · LAX 17:14 · JFK 20:14
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1