c++ - 当用户按下 'Ctrl-D' 时,我试图结束我的 C++ 程序

标签 c++ unix ctrl

我的程序读入了一个大的单词文件(字典)并将它们全部插入到哈希表中。我提示用户查找一个词,我希望他们能够通过按 Ctrl-D 来终止程序。这是我尝试过的方法,但是当我按下 Ctrl-D 时,它只是卡在一个循环中,打印出我在 else 语句中的内容。我正在使用 Unix。我试图在这个网站上查找这个,但我尝试的没有任何效果,因此我为什么要问我自己的问题。有什么想法吗?附言。转换是让用户输入全部大写以匹配我正在读取的文件。

void query(){
            bool done = false;
            string lookupWord;
            while(!done){
                    cout << "Type a word to lookup or type ctrl-D to quit: ";
                    cin >> lookupWord;
                    if(atoi(lookupWord.c_str()) == EOF)
                            done = true;
                    else{
                            transform(lookupWord.begin(), lookupWord.end(), lookupWord.begin(), ::toupper);
                            cout << endl << "Word: " << lookupWord << endl;
                            cout << endl << "Definition: " << myDict.lookup(lookupWord) << endl << endl;
                    }
            }
    }

最佳答案

atoi(lookupWord.c_str()) == EOF

这并不像您想象的那样。这会检查 atoi() 的返回值并将其与 EOF 进行比较。 EOF 通常定义为 -1。因此,只有在输入 -1 时,代码才会完成设置。这不是您想要的。

std::istream 有一个方便的 operator bool 来测试文件流是否处于良好状态。所以,真正需要做的是:

if (cin >> lookupWord)
{
    // Your existing code is here
}
else
{
    done=true;
}

关于c++ - 当用户按下 'Ctrl-D' 时,我试图结束我的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40688255/

相关文章:

python - 使用 Python 引发异常时回滚操作的最佳方法

c++ - 干掉只有 const 不同的代码

c++ - 我应该通过 API 还是通过项目的源代码本身使用英特尔 Embree?

bash - Unix 单行代码交换/转置多个文本文件中的两行?

CYGWIN Ms-Dos 路径检测到警告

java - Java中输入Ctrl+D时如何退出程序?

c++ - 获取调用函数调用的C++程序中的所有行号

c++ - 具有奇怪返回类型的结构

php - 使用 XAMPP 在 Linux Mint 中配置 LAMP 环境——安装 Memcache

python - TreeView 小部件中的 CTRL + a - Python