Чтение из файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Проблема с циклом, не понимаю как сделать так, чтобы программа считает каждую строку, сравнивает с похожей, если очередная строка не подходит- переходим на следующую строку, и так пока весь файл не прочитает ( по идеи если есть строка нужная- вывести ее и цикл закончить, нет ее- в конце сообщение типа " совпадений не найдено") Вот функция моя:
Листинг программы
  1. void poisk(void)
  2. {
  3. char PoiskPoAdresu[50], stringlih[100];
  4. FILE * out = fopen("BDmenedgeraParoley.txt", "r");
  5. printf("Для поиска пароля введите адрес сайта: ");
  6. scanf("%s", &PoiskPoAdresu);
  7. printf("Данные: ");
  8. while (fgets(stringlih,sizeof(stringlih), out) != NULL)
  9. {
  10. if (strstr(stringlih, PoiskPoAdresu) !=NULL)
  11. {
  12. printf("%s ", stringlih); break;
  13. }
  14. else printf("Не найдено\n");
  15. }
  16. fclose(out);
  17. }
Проблема в том, что прочитав строку, программа видит что не строка не подходит и пишет сообщение, и читает далее до нужной, находит нужную - выводит ее и завершает чтение файла. ( на скрине видно) Что не так, подскажите?

Решение задачи: «Чтение из файла»

textual
Листинг программы
  1. while (fgets(stringlih, sizeof(stringlih), out) != NULL)
  2.     {
  3.         if (strstr(stringlih, PoiskPoAdresu) != NULL)
  4.         {
  5.             printf("%s \n\n", stringlih); break;
  6.         }
  7.     }
  8.            if (strstr(stringlih, PoiskPoAdresu) == NULL)
  9.                printf("не найдены\n");
  10.            else
  11.            printf("В строке: %s хранятся данные для воссоздания пароля \n ", stringlih);

Объяснение кода листинга программы

  1. Объявлена переменная stringlih типа char* и инициализирована значением stringlih.
  2. Объявлена переменная out типа FILE*.
  3. В цикле while происходит чтение из файла с помощью функции fgets в переменную stringlih.
  4. Если в строке stringlih найдено совпадение с шаблоном PoiskPoAdresu с помощью функции strstr, то выводится сообщение с содержимым этой строки.
  5. Если в строке stringlih не найдено совпадение с шаблоном PoiskPoAdresu с помощью функции strstr, то выводится сообщение не найдены.
  6. Если в строке stringlih найдено совпадение с шаблоном PoiskPoAdresu с помощью функции strstr, то выводится сообщение В строке: stringlih хранятся данные для воссоздания пароля.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы