当用户按下“Ctrl-D”

时间:2016-11-19 01:22:47

标签: c++ unix ctrl

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

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;
                    }
            }
    }

1 个答案:

答案 0 :(得分:1)

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;
}