【问题标题】:CTRL+D suddenly stopped working in Mac OS X Terminal, will not perform EOL operationCTRL+D 在 Mac OS X Terminal 中突然停止工作,不会执行 EOL 操作
【发布时间】:2016-06-07 11:07:44
【问题描述】:

我有一些基本代码,我试图在终端中运行一个类。完成输入后,我无法使用 ctrl+d 命令结束代码。该代码查找某些字符的数量,“e”,元音以及使用的总字符数。昨天几个小时,我能够使用 Ctrl+D 命令结束我的程序并继续编辑/添加它,但它突然停止工作。

我注意到当在窗口中输入一串“d”时,按下回车键,然后使用ctrl+d,编程成功显示数据,但其他输入似乎没有给出我正在寻找的 EOF 命令。

我已尝试重置我的终端,保存“d”字符串工作的条件并再次尝试。到底是怎么回事?在广泛阅读该主题后,我认为这可能是由于后台运行的其他原因?

int main() {
    char ch;
    int ecount=0, vowels=0, other=0;
    cin.get(ch);
    while(!cin.eof()) {
        switch(ch) {
            case 'e':
                ecount++;
            case 'a';
            case 'i':
            case 'o':
            case 'u': 
                vowels++;
                break;
            default:
                other++; 
        }
        cin.get(ch);
    }
    cout << ecount << " "<< vowels << " " << other << endl;
}

【问题讨论】:

  • 如果不先按回车,就得按两次Ctrl+D。
  • @thatotherguy 我也注意到了——这是标准行为吗?你知道是什么原因造成的吗?
  • 是的,这是意料之中的。 Ctrl-D 只是对终端进行任何挂起的读取调用,并返回任何当前缓冲的数据,类似于 Return(除了你还会得到一个\n)。如果在 Return 或 Ctrl-D 之后按 Ctrl-D,则 read 调用将返回 0 个字节,按照惯例,这意味着输入结束。

标签: c++ macos shell terminal eof


【解决方案1】:

你不应该只循环测试eof。流出错还有其他方法。像这样循环:

while( cin.get(ch) )
{
    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 2017-08-22
    • 2021-02-01
    • 2016-12-29
    • 2018-05-09
    • 2015-12-07
    相关资源
    最近更新 更多