【问题标题】:c++ stop asking for input on ctrl-dc++ 停止在 ctrl-d 上要求输入
【发布时间】:2023-03-16 01:58:01
【问题描述】:

我正在尝试读取用户输入,直到按下 ctrl-d。如果我是正确的,ctrl+d 会发出一个 EOF 信号,所以我尝试检查 cin.eof() 是否为真,但没有成功。

这是我的代码:

string input;
cout << "Which word starting which year? ";
while (getline(cin, input) && !cin.eof()) {
    cout << endl;
    ...
    cout << "Which word starting which year? ";
}

【问题讨论】:

    标签: c++ input getline


    【解决方案1】:

    所以你想读到EOF,这很容易通过简单地使用while循环和getline来实现:

    std::string line; 
    while (std::getline(std::cin, line))
    {
        std::cout << line << std::endl;
    }
    

    这里使用getline(getline 返回输入流) 你得到输入,如果你按下Ctrl+D,你就会跳出while循环。

    值得注意的是,EOF 在 Windows 和 Linux 上的触发方式不同。您可以从命令行。

    请记住,您也可能在其他情况下退出循环 - std::getline() 可能会因某些故障返回错误的流,您可能也需要考虑处理这些情况。

    【讨论】:

    • 我相信std::endl 在这里是多余的,因为不需要刷新流。可能是旧的'\n'? endl 是性能问题的根源
    • @Incomputable 这是一个过早的优化。
    • std::getline() 也可能为其他类型的故障返回错误流(但如果 std::cin 连接到终端,则最有可能出现 EOF)。
    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多