Подсчитать количество чисел в текстовом файле - 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;
}

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

  1. Подключение необходимых библиотек для работы с файлами и строками.
  2. Объявление переменных:
    • file - указатель на файл;
    • c - счетчик количества чисел;
    • sym - символ, который считывается из файла.
  3. Открытие файла test.txt для чтения с помощью функции fopen.
  4. Проверка, открылся ли файл, при отрицательном результате выводится сообщение об ошибке и возвращается 1.
  5. Считывание первого символа из файла с помощью функции fscanf.
  6. Организация цикла по всем символам файла до достижения конца файла с помощью условия while(!feof(file)).
  7. Проверка, является ли текущий символ числом с помощью функции isdigit.
  8. Если символ является числом, то он выводится на экран с помощью функции putchar, а счетчик c увеличивается на 1.
  9. Считывание следующего символа из файла с помощью функции fscanf.
  10. Закрытие файла с помощью функции fclose после окончания работы с ним.
  11. Вывод сообщения с количеством найденных чисел с помощью функции printf, а затем возвращение 0, что означает успешный конец работы программы.

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


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

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

9   голосов , оценка 3.889 из 5
Похожие ответы