Считать текст из файла и вывести на экран только строки, содержащие двузначное числа - C (СИ)
Формулировка задачи:
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначное числа. Ввод-вывод осуществляется с помощью средств С.
Думал так, сначала сделаю что бы просто считал текст из файла, а потом вывод строк:
и вот после этого я остановился, что дальше делать не знаю. Как сделать эту проверку на двузначное число и как вывести только одну строку?
Буду благодарен за помощь.
#include <stdio.h>
#include <conio.h>
int main() {
clrscr();
FILE *fileOpen;
fileOpen = fopen("C:\\test1.txt","rt");
if (!fileOpen) {
printf("Error: Can't open file\n");
}
while ( (c = getc(fileOpen)) != EOF)
putchar(c);
printf("%c",c);
fclose(fileOpen);
printf("\n");
printf("\nPress any key");
getch();
return 0;
}Решение задачи: «Считать текст из файла и вывести на экран только строки, содержащие двузначное числа»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*...*/
FILE * f;
char buf[BUFSIZ], * p;
/* open file... */
while ( fgets(buf, BUFSIZ, f) )
if ( ( p = strpbrk(buf, "0123456789") ) && isdigit(*(p+1)) && ! isdigit(*(p+2)) )
printf("%s", buf);
/*...*/
Объяснение кода листинга программы
- Подключение необходимых библиотек:
<stdio.h>,<string.h>,<ctype.h>. - Объявление переменных:
—
f— указатель на файл; —buf— массив символов, используемый для чтения из файла; —p— указатель на первый непропущенный символ в массивеbuf. - Открытие файла в режиме чтения.
- Чтение файла до тех пор, пока не достигнут конец файла:
—
fgets(buf, BUFSIZ, f)— считывание строки из файла в массивbuf. - Проверка условия для вывода строки:
—
( p = strpbrk(buf,0123456789) )— поиск первого двузначного числа в строке; —isdigit(*(p+1))— проверка следующего за найденным числом символа на цифру; —! isdigit(*(p+2))— проверка следующего после следующего за найденным числом символа на нецифру. - Вывод строки, удовлетворяющей условию.
- Закрытие файла.
- Возврат 0, чтобы показать, что программа успешно завершилась.