2016-11-19 3 views
0

моя программа прочитала большой файл слов (словарь) и вставила их в хэш-таблицу. Я предлагаю пользователю найти слово, и я хочу, чтобы они могли завершить программу, нажав Ctrl-D. Это то, что я пробовал, но когда я нажимаю Ctrl-D, он просто застревает в цикле, распечатывая то, что у меня есть в инструкции else. Я использую Unix. Я попытался посмотреть это на этом веб-сайте, и ничего не работало, поэтому я пытаюсь объяснить, почему я задаю свой вопрос. Есть предположения? PS. Преобразование состоит в том, чтобы заставить пользователя вводить все прописные буквы в соответствии с файлом, который я читаю.Я пытаюсь закончить свою программу на C++, когда пользователь нажимает «Ctrl-D»

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 или команду exit. См. Эту страницу: 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

Смежные вопросы