Вывести из файла на экран только содержащие двузначные числа строки - C (СИ)
Формулировка задачи:
Дорогие, не откажите в помощи!!
Вот есть задание "написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа"
Сам попытался сделать, вот что написал
Не судите строго, не так давно учусь программированию! Пока не все получается!
Помогите пожалуйста исправить ошибки в коде, чтобы выводило правильно) А то у меня запускается процесс компиляции, а строки не выводит
Заранее спасибо!!
#include <stdio.h>
int main() {
FILE * file = fopen( "input.txt", "rt" );
if ( file == 0 ) {
printf( "Can't find and open input file\n" );
return 1;
}
while ( ! feof( file ) ) {
char line[ 256 ];
if ( fgets( line, 255, file ) != 0 ) {
int n;
if ( sscanf( line, "%i", &n ) == 1 ) {
if ( n >= 10 && n <= 99 ) {
printf( "%s", line );
}
}
}
}
fclose( file );
}Решение задачи: «Вывести из файла на экран только содержащие двузначные числа строки»
textual
Листинг программы
#include <ctype.h> //isdigit
#include <stdio.h> //i/o
#include <string.h>
//ÔóГ*ГЄГ¶ГЁГї ïðîâåðÿåò ñîæåðæèò ëè ñòðîêГ* õîòÿ ГЎГ» 1-Г*Г® äâóõçГ*Г*Г·Г*îå ÷èñëî
int isStrHas2digNumbers(char * str);
int main()
{
//Õîðîøî áóäåì ïîëГ*ГЈГ*ГІГј, Г·ГІГ® ñòðîêè Гў ГґГ*éëå êîðî÷å 256 ñèìâîëîâ
char line[256] = {0};//Г·ГІГ® Гў îáùåì ñëó÷Г*ГҐ ñîâñåì Г*ГҐ ГІГ*ГЄ
int nLines = 0;//Áóäåò ñîæåðæГ*ГІГј ñóììГ*Г°Г*îå ÷èñëî ñòðîê Г± äâóõçГ*Г*Г·Г*ûìè
FILE * file = fopen( "input.txt", "rt" );
if ( file == 0)
printf( "Can't find and open input file\n" );
else
{
while ( ! feof( file ) )
{
if ( fgets( line, 255, file ) )
if ( isStrHas2digNumbers(line))
{
nLines = nLines + 1;//óâåëè÷èâГ*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐ Г±Г·ВёГІГ·ГЁГЄГ*
printf("%s\n", line);//ГЇГҐГ·Г*ГІГ*ГҐГ¬ ñòðîêó
}
}
fclose(file);
}
printf("input.txt contains from %d lines with 2digit values\n", nLines);
getchar();
return 0;
}
int isStrHas2digNumbers(char * str)
{
int i;
int val;
char delim[128 - (48 + 9)] = {0};//ГЌГ*ГёГ* ñòðîêГ* Г± ГЇГҐГ·Г*ГІГ*åìûìè ñèìâîëГ*ìè ASCII
for(i = 0; i < 128 - (48 + 9); i++)
delim[i] = i + (48 + 9);
char * tok = NULL;
char buf[256] = {0};//Áóôôåð äëÿ ñòðîêè
int isContain = 0;//ÔëГ*ГЈ ГіГЄГ*çûâГ*ГѕГ№ГЁГ© Г·ГІГ® Гў ñòðîêå ГҐГ±ГІГј äâóõçГ*Г*Г·Г*ûå
if(str != NULL)
{
strcpy(buf, str);
for(tok = strtok(buf,delim); tok != NULL && !isContain; tok = strtok(NULL,delim))
{
if(sscanf(tok,"%d", &val))//Âñòðåòèëè öèôðó
if(9 < val && val < 100)
isContain = 1;
}
}
return isContain;
}