LINUX.ORG.RU

Программа зависает при чтении строк из файла

 ,


0

3

Хочу построчно читать файл, сравнивая каждую строку с образцом. Написал следующий фрагмент кода, программа целиком компилируется, но при исполнении сваливается в бесконечный цикл. Что я делаю не так? Поиски по StackOverflow на «infinite loop getline» выдают в основном советы сделать точно такое же условие в while, которое у меня стоит, но код не работает.

    while (std::getline(file, current_string))
      {
	++i;
	std::getline(file, current_string);
	if (search_for.compare(current_string) == 0)
	  {
	    break;
	  }
      }
★★
Ответ на: комментарий от Deleted

Согласен, не зачем, я ступил. Тем не менее, проблема остаётся.

Hasek ★★
() автор топика
Ответ на: комментарий от exepush

Ну feof сам мне не подходит, потому что file у меня это объект ifstream, но вот на StackOverflow есть тред с объяснением, что eof использовать не надо, а надо условие как у меня. Но не работает (c eof тоже не работало, пробовал).

Hasek ★★
() автор топика
while ((read = getline(&current_string, &len, file)) != -1) if(strcmp(search_for, current_string) ==0) break;
anonymous
()

Всем спасибо за ответы, вопрос решён!

Hasek ★★
() автор топика
Ответ на: комментарий от anonymous

Помимо поиска строки нужно ещё знать её номер.

Hasek ★★
() автор топика

Все нормальные люди для прямых обходов используют цикл for:

#include <iostream>

int main(int argc, char const* argv[])
{
    int i = 0;
    char const* const match_to = "123 456";
    for (std::string line; std::getline(std::cin, line); ) {
        ++i;
        if (match_to == line) {
            std::cout << "match at line:" << i << std::endl;
            break;
        }
    }
    return 0;
}

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.