Удаление комментариев из файла - C (СИ)
Формулировка задачи:
есть набросок функции, которая удаляет из файла все комментарии(с поддержкой многострочности.).
помогите исправить ошибки и правильно реализовать.
#include <string.h> #include <stdio.h> #include <stdlib.h> int DelComments() { int i=0; int c; char *string=(char*)malloc(256); scanf("%s", string); while(true) { if ((strstr(string, "{"))&&(strstr(string, "}"))) { int StartComment=strstr(string, "{")-string; for (i=(strstr(string, "}")-string)+1; i<=strlen(string); i++) { string[StartComment]=string[i]; StartComment++; } else { breake; } return 1 } } }
Решение задачи: «Удаление комментариев из файла»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <process.h> int main(int argc, char* argv[]) { FILE *fi,*fo; char finp[256]; char fout[256]; char c,p; int sig_comm; strcpy(finp,argv[1]); strcpy(fout,argv[2]); if ((fi=fopen(finp,"r")) == NULL) { printf("File %s not found!\n",finp); exit(-1); } if ((fo=fopen(fout,"w")) == NULL) { printf("File %s cannot be opened!\n",finp); exit(-1); } p=fgetc(fi); sig_comm=0; while (1) { c=fgetc(fi); if (c==EOF) break; if ((sig_comm == 0) && (c == '*') && (p == '/')) { fseek(fo,-1L,SEEK_END); sig_comm=1; } if (sig_comm == 0) {fputc(p,fo); printf("%c",p);} if ((sig_comm == 1) && (c == '/') && (p == '*')) { c=fgetc(fi); sig_comm=0; } p=c; } if (sig_comm == 0) fputc(p,fo); fclose(fi); fclose(fo); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, string.h, process.h
- Определяются основные переменные: — fi - указатель на файл для чтения — fo - указатель на файл для записи — finp - массив для хранения имени исходного файла — fout - массив для хранения имени результирующего файла — c - текущий символ из исходного файла — p - предыдущий символ из исходного файла — sig_comm - флаг, определяющий наличие комментария
- Копируются имя исходного файла и имя результирующего файла в соответствующие переменные
- Открываются исходный и результирующий файлы для чтения и записи соответственно
- Если файл для чтения не может быть открыт, выводится сообщение об ошибке и программа завершается
- Если файл для записи не может быть открыт, выводится сообщение об ошибке и программа завершается
- Устанавливаются начальные значения для циклов чтения файла
- В цикле чтения файла: — Если достигнут конец файла (EOF), цикл прерывается — Если текущий символ равен '' и предыдущий символ равен '/', то удаляется последний символ из результирующего файла — Если текущий символ не является комментарием, он записывается в результирующий файл и выводится на экран — Если текущий символ равен '/' и предыдущий символ равен '', то продолжается чтение файла
- Если после цикла остались символы в исходном файле, они записываются в результирующий файл
- Закрываются исходный и результирующий файлы
- Программа возвращает 0, что означает успешное выполнение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д