Проблема возникает в этой части исходного кода:
getline(cin,word);
if(word == keyWord)
{
cout << word << endl;
count++;
}
Прежде всего, вы не хотите читать строки из cin . Вы хотите прочитать слова из infile . Поэтому вы должны заменить первую строку вашего кода внутри цикла на:
infile >> word;
if(word == keyWord)
{
cout << word << endl;
count++;
}
Кроме того, вы должны изменить условие цикла. Вам не нужно проверять, открыт ли здесь infile . Вы должны проверить это до цикла начинается. Для цикла необходимо проверить, достигнуто ли состояние eof или нет:
if ( !infile.is_open() ) {
cerr << "Error while opening file." << endl;
exit( EXIT_FAILURE );
}
while( !infile.eof() ) {
infile >> word;
if(word == keyWord)
{
cout << word << endl;
count++;
}
}
И, как вы видите, теперь вы можете избавиться от этой странной секунды , если вы поместите внутрь цикла.
Последний шаг - ввести технику «чтение впереди»: нет смысла проверять eof, когда мы ничего не читали.
if ( !infile.is_open() ) {
cerr << "Error while opening file." << endl;
exit( EXIT_FAILURE );
}
infile >> word;
while( !infile.eof() ) {
if( word == keyWord )
{
cout << word << endl;
count++;
}
infile >> word;
}
Надеюсь, это поможет.