控制台程序在Ctrl + Z后停止执行

时间:2018-01-22 12:45:44

标签: c++ console-application

我正在通过B. Stroustrup的编程原理和练习使用C ++ ,我在其中一个练习中遇到了问题。我使用的是Windows 10(我相信,这与此相关)。 下面的代码应该向用户询问要打印的单词。但是,如果一个词是"西兰花",那么而不是"西兰花"," BLEEP"将被打印。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }

int main()
{
    string bad_word = "broccoli";
    cout << "type in some words\n";
    vector <string> words;
    for (string temp; cin >> temp; )
        words.push_back(temp);
    cout << "There are " << words.size() << " words in vector 'words'.\n";

    for (string word : words) {
        if (word != bad_word)
            cout << word;
        else
            cout << "BLEEP";
    }

    keep_window_open();
    return 0;
}

所以,我有我的程序问我的话,我打印一些,然后按Ctrl + Z + Enter,没有任何反应。如果我再次这样做,控制台将关闭。为什么不打印此行指定的字数?

cout << "There are " << words.size() << " words in vector 'words'.\n";

为什么程序在按Ctrl + Z +第二次输入后完成执行? 我想了解这里的问题究竟是什么。 谢谢。

1 个答案:

答案 0 :(得分:0)

ctrl-z是文件结束信号。 这会禁用输入流(cin)的读取。

所以你的保持窗口打开功能立即返回而不等待(因为无法读取),并且你的控制台关闭了。