2016-11-19 43 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

相關問題