使用C++的原理和实践,如何退出循环。

3

我是一名初学者,正在使用《C++程序设计原理与实践》学习C++。参考书籍为第4章,但在4.6.3和4.6.4示例代码中存在一些疑问,我将粘贴一部分代码并解释我的困惑,这可能非常基础:

int main()
{
    vector<string> words;
    for (string temp; cin >> temp; ) // read whitespace-separated words
        words.push_back(temp); // put into vector
    cout << "Number of words: " << words.size() << '\n';
}

我现在使用的是Windows 7,并且正在使用Microsoft Visual Studio 2017。如果我运行上述代码,我可以不停地输入单词,但我不知道如何“退出”for循环并到达“cout”部分。这两个章节的所有示例(对我来说)都有这个问题,一旦我运行这些代码,我就会被困在for循环中,就是这样,现在我知道我可以使用if语句并决定使用一个特定字符,比如0,来退出循环并运行其余的代码,但是作者没有这样做,这告诉我可能有一些快捷键可以在不关闭程序的情况下“退出”循环。


你试过什么都不输入吗? - Nick stands with Ukraine
嗨,我尝试了输入退格键或只是按回车键,但它只是跳到上一行(你怎么用正确的英语说呢?) - edo
1个回答

4

输入完字符串后,按下 Enter,然后在 Windows 上按下 Ctrl+Z 或者在 Linux 上按下 Ctrl+D,最后再按一次 Enter。这样会向输入流发送 EOF 字符,导致条件 cin >> temp; 隐式地求值为 false,从而退出 for 循环。上述内容可以转换为使用 while 循环

#include <iostream>
#include <vector>
#include <string>

int main() {
    char c = 'y';
    std::string tempstr;
    std::vector<std::string> words;
    while (std::cin && c == 'y'){
        std::cout << "Enter string: " << std::endl;
        std::getline(std::cin, tempstr);
        words.push_back(tempstr);
        std::cout << "Another entry? y/n: ";
        std::cin >> c;
        std::cin.ignore();
    }
}

我认为 ctrl+c 是关闭程序的快捷键。 - LogicalAnt
1
Ctrl+C 会向进程发送 SIGINT 信号,为什么它不被视为输入。如果你想发送EOF,UNIX 上是 Ctrl+D,Windows 上是 Ctrl+Z。 - Algirdas Preidžius
除非OP实现了处理SIGINT的功能,否则程序将终止。OP希望退出循环而不关闭程序。 - bgfvdu3w
@Ron,我正在送比萨(哈哈),读到了你的回复。一开始我对自己说:“我尝试了Ctrl+Z,它只是关闭了程序”,或者我以为是这样。然后我有了“顿悟”,在Windows中,你必须添加keep_window_open();才能防止可执行文件瞬间关闭...简而言之,Ctrl+Z有效,Windows用户只需记住将keep_window_open();添加到代码中。非常感谢您的时间。 - edo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接