Подсчитать количество чисел в текстовом файле - C (СИ) (71993)
Формулировка задачи:
Подсчитать кол-в чисел в текстовом файле
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "logotip.c"
#include <ctype.h>
#include <string.h>
#include <unistd.h>
void time_stamp(FILE *f)
{
time_t t;
t=time(NULL);
fprintf(f,"=====%s=====\n",ctime(&t));
}
int main(int argc,char* argv[])
{
char a1,a2;
char buffer[20],str_file[100];
char mass[100],ch,word[100];
char word_max[100];
//const char ch[200],mass[100];
int a,i,n1,b,count=0,state;
int n;
int j;
FILE *filein,*fileout,*flog;
logo();
printf("Краткое изложение задачи:\n");
printf("В текстовом файле найти самую длинную последовательность цифр\n");
printf("Выполнил Рожкин Павел Александрович,ИВТ-12\n");
sprintf(buffer,"%s.log",argv[0]);
if((flog=fopen(buffer,"a"))==NULL)
{
puts("Ошибка открытия журнала");
puts("Нажмите Enter");
getchar();
exit(0);
}
time_stamp(flog);
fprintf(flog,"Программа %s приступила к работе",argv[0]);
if(argc<2)
{
time_stamp(flog);
fprintf(flog,"Ошибка,недостаточно аргументов командной строки,работы завершена\n");
printf("Ошибка,используйте %s filename1 filename2\n",argv[0]);
getchar();
fclose(flog);
exit(0);
}
if((filein=fopen(argv[1],"r"))==NULL)
{
time_stamp(flog);
fprintf(flog,"Невозможно открыть входной файл %s ,программа завершила работу",argv[1]);
getchar();
fclose(flog);
printf("Невозможно открыть файл %s,программа завершает работу\n",argv[1]);
exit(0);
}
time_stamp(flog);
fprintf(flog,"Файл %s открыт успешно",argv[1]);
if((fileout=fopen(argv[2],"w"))==NULL)
{
time_stamp(flog);
fprintf(flog,"Невозможно открыть файл %s ,программа завершила работу",argv[2]);
printf("Невозможно открыть выходной файл %s,программа завершает работу\n",argv[2]);
getchar();
fclose(flog);
exit(0);
}
time_stamp(flog);
fprintf(flog,"Файл %s открыт успешно",argv[2]);
//printf("asdasdsad\n");
state=0;
n=0;
i=0;
while(1)
{
ch=fgetc(filein);
if(feof(filein)) break;
if(state==0&&isdigit(ch))
{
word[count]=ch;
state=1;
count++;
n++;
//fprintf(fileout,"%c",ch);
continue;
}
if(state==0&&!isdigit(ch))
{
//count=0;
n=0;
continue;
}
if(state==1&&!isdigit(ch))
{
word[count]='\0';
state=0;
if(i==0) {n1=n;i++;}
if(n<n1&&n1!=n)
{
//printf("%c\n",word);
//strcpy(word_max,word);
}
else
{
n1=n;
strcpy(word_max,word);
}
count=0;
n=0;
}
if(state==1&&isdigit(ch))
{
word[count]=ch;
count++;
//fprintf(fileout,"%c",ch);
n++;
continue;
}
}
fprintf(fileout,"Наибольшая последовательность цифр(она состоит из %d цифр ):%s",n1,word_max);
printf("Наибольшая последовательность цифр(она состоит из %d цифр )%s\n",n1,word_max);
fclose(filein);
fclose(fileout);
fprintf(flog,"Операция выполнена успешно,%s и %s успешно закрыты,программа завершила работу",argv[1],argv[2]);
printf("Операция выполнена успешно,%s и %s успешно закрыты,программа завершает работу\n",argv[1],argv[2]);
getchar();
fclose(flog);
exit(0);
}Решение задачи: «Подсчитать количество чисел в текстовом файле»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
FILE * file;
int c=0;
char sym;
file = fopen("test.txt","r");
if (file==NULL)
{
puts("File Erorr!");
return 1;
}
fscanf(file,"%c",&sym);
while(!feof(file))
{
if(isdigit(sym))
{
putchar(sym);
c++;
}
fscanf(file,"%c",&sym);
}
fclose(file);
printf("Count:%d!\n",c);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками.
- Объявление переменных:
file- указатель на файл;c- счетчик количества чисел;sym- символ, который считывается из файла.
- Открытие файла
test.txtдля чтения с помощью функцииfopen. - Проверка, открылся ли файл, при отрицательном результате выводится сообщение об ошибке и возвращается 1.
- Считывание первого символа из файла с помощью функции
fscanf. - Организация цикла по всем символам файла до достижения конца файла с помощью условия
while(!feof(file)). - Проверка, является ли текущий символ числом с помощью функции
isdigit. - Если символ является числом, то он выводится на экран с помощью функции
putchar, а счетчикcувеличивается на 1. - Считывание следующего символа из файла с помощью функции
fscanf. - Закрытие файла с помощью функции
fcloseпосле окончания работы с ним. - Вывод сообщения с количеством найденных чисел с помощью функции
printf, а затем возвращение 0, что означает успешный конец работы программы.