Нужно в цикле читать слово из файла. Цикл должен работать до тех пор, пока в файле есть строки. Читаю строки так:
std::ifstream val("val.txt");
char val2[16] ;
val >> val2;
Скорее всего автор пытался сказать, как проверить, закончился ли файл:
if(val.eof())
break;
И да, читаете Вы слово, а не строку.
Проверяйте на успешность каждую операцию чтения:
ifstream file("val.txt");
for (string word; file >> word; )
; // здесь что-то с word можно сделать
Цикл заканчивается когда произошла ошибка либо наступил конец файла. Никаких file.eof()
нет в условии цикла. Только после цикла, после чтения имеет смысл вызвать file.eof()
, чтобы узнать наступил ли конец файла. К примеру, чтобы вернуть статус возврата из main()
:
return !file.eof(); // успех, если дошли до конца файла
Для чтения строк можно использовать getline()
:
while(getline(cin, line)) // count words
++counter[line];
if (!cin.eof())
return 1; // I/O error
Обратите внимание, возвращаемое значение getline()
проверяется после каждого вызова, cin.eof()
внутри цикла чтения не используется и вызывается после окончания чтения. Если конец файла не достигнут, то это считается ошибкой в этом случае.
Аналогично при неявных >>
-операциях. К примеру, чтобы найти слово в файле, можно использовать istream_iterator<>
:
ifstream file("input.txt");
istream_iterator<string> eof;
bool found = find(istream_iterator<string>(file), eof, word) != eof;
Снова, file.eof()
при чтении файла не используется. Можно в конце вызвать .eof()
метод, чтобы узнать произошла ли ошибка:
int main() {
...
return found ? 0 : (cin.eof() ? 1 : 2);
}
В этом случае, нулевой статус означает что слово найдено, а cin.eof()
позволяет различить случаи когда слово не присутствует (возвращается 1
) от случая когда ошибка произошла (возвращается 2
) -- как это grep
утилита может делать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Ребят, пытаюсь разобраться с библиотекой boostНужны большие числа
Есть у меня проект интерпретатора Basic, написанный на С++Проект довольно давний, ему уже лет 20