Unix — я пытаюсь завершить свою программу на C ++, когда пользователь нажимает «Ctrl-D»

моя программа прочитала большой файл слов (словарь) и вставила их в хеш-таблицу. Я предлагаю пользователю найти слово, и я хочу, чтобы он мог завершить программу, нажав 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;
}
}
}

0

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector