2016-11-19 19 views
0

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

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

可能是因为Unix将Ctrl-D输入解释为EOF或退出命令。请参见此页:http://superuser.com/questions/169051/whats-the-difference-between-c-and-d-for-unix-mac-os-x-terminal – petryuno1

回答

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

谢谢您澄清什么EOF代表价值。也感谢你为我工作的代码建议。非常感激。 – CodySig

相关问题