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

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

  •  
  •   GromHellscream · 2018-02-13 22:39:24 +08:00 · 3003 次点击
    这是一个创建于 2500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原帖: 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
    GromHellscream
        1
    GromHellscream  
    OP
       2018-02-13 22:39:55 +08:00
    clarkok
        2
    clarkok  
       2018-02-13 22:42:34 +08:00 via Android
    按 ctrl+c 可破

    你需要给这个 cin 发一个 eof,才能让 cin >> words 返回的 std::istream 的 operator bool() 返回 false。我记得不是 ctrl+c 就是 ctrl+z 就是 ctrl+d
    GromHellscream
        3
    GromHellscream  
    OP
       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
        4
    GromHellscream  
    OP
       2018-02-13 22:48:05 +08:00
    GromHellscream
        5
    GromHellscream  
    OP
       2018-02-13 22:48:49 +08:00
    这直接产生 signal,程序无法执行下去了呀?
    @clarkok
    GromHellscream
        6
    GromHellscream  
    OP
       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
        7
    wallriding  
       2018-02-13 22:58:24 +08:00
    我试着回答下吧
    因为你的循环条件是 cin 的返回值,就是只要你输入的是一个有效字符串,就会一直循环下去
    然而我们都知道用键盘输入的肯定是有效的字符串,所以就无限 cin
    所以你需要另外指定条件来跳出循环

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