Чтение из файла - C (СИ)
Формулировка задачи:
Проблема с циклом, не понимаю как сделать так, чтобы программа считает каждую строку, сравнивает с похожей, если очередная строка не подходит- переходим на следующую строку, и так пока весь файл не прочитает ( по идеи если есть строка нужная- вывести ее и цикл закончить, нет ее- в конце сообщение типа " совпадений не найдено")
Вот функция моя:
Проблема в том, что прочитав строку, программа видит что не строка не подходит и пишет сообщение, и читает далее до нужной, находит нужную - выводит ее и завершает чтение файла.
( на скрине видно)
Что не так, подскажите?
void poisk(void)
{
char PoiskPoAdresu[50], stringlih[100];
FILE * out = fopen("BDmenedgeraParoley.txt", "r");
printf("Для поиска пароля введите адрес сайта: ");
scanf("%s", &PoiskPoAdresu);
printf("Данные: ");
while (fgets(stringlih,sizeof(stringlih), out) != NULL)
{
if (strstr(stringlih, PoiskPoAdresu) !=NULL)
{
printf("%s ", stringlih); break;
}
else printf("Не найдено\n");
}
fclose(out);
}Решение задачи: «Чтение из файла»
textual
Листинг программы
while (fgets(stringlih, sizeof(stringlih), out) != NULL)
{
if (strstr(stringlih, PoiskPoAdresu) != NULL)
{
printf("%s \n\n", stringlih); break;
}
}
if (strstr(stringlih, PoiskPoAdresu) == NULL)
printf("не найдены\n");
else
printf("В строке: %s хранятся данные для воссоздания пароля \n ", stringlih);
Объяснение кода листинга программы
- Объявлена переменная
stringlihтипаchar*и инициализирована значениемstringlih. - Объявлена переменная
outтипаFILE*. - В цикле
whileпроисходит чтение из файла с помощью функцииfgetsв переменнуюstringlih. - Если в строке
stringlihнайдено совпадение с шаблономPoiskPoAdresuс помощью функцииstrstr, то выводится сообщение с содержимым этой строки. - Если в строке
stringlihне найдено совпадение с шаблономPoiskPoAdresuс помощью функцииstrstr, то выводится сообщениене найдены. - Если в строке
stringlihнайдено совпадение с шаблономPoiskPoAdresuс помощью функцииstrstr, то выводится сообщениеВ строке: stringlih хранятся данные для воссоздания пароля.