Отформатировать файл с программой на языке С - C (СИ)
Формулировка задачи:
Задача: Отформатировать файл с программой на языке С.
Проблема: не могу понять, как нормально отформатировать switch ( проблема с табуляциями после case )
функции:main:
header.h:
#include "Header.h" int init_mas_format(FILE* res, char* str, int i) { fprintf(res, " "); while (str[i - 1] != '}') { if (str[i - 1] == ',') { fprintf(res, " "); } fprintf(res, "%c", str[i]); i++; } return i; } int for_format(FILE* res, char * str, int i) { while (str[i + 1] != '{') { fprintf(res, "%c", str[i]); i++; if (str[i - 1] == 'r' && str[i - 2] == 'o' && str[i - 3] == 'f' && str[i] != ' ') { fprintf(res, " "); } if (str[i] == ' ' && str[i + 1] == ';') { fprintf(res, ";"); i = i + 2; } if (str[i] == ' ' && ((str[i + 1] == '+' && str[i + 2] == '+') || (str[i + 1] == '-' && str[i + 2] == '-'))) { fprintf(res, "%c%c", str[i + 1], str[i + 2]); i = i + 3; } if ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] == ' ' && str[i + 1] == '=') { fprintf(res, "%c", str[i + 1]); i = i + 2; } if (((str[i - 1] == '='&& str[i] != '=') || (str[i] == '&' && str[i + 1] == '&' && str[i - 1] != ' ') || (str[i - 1] == '&' && str[i] != ' ' && str[i] != '&') || (str[i] == '&' && str[i - 1] != '&' && str[i - 1] != ' ') || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != '!' && str[i - 1] != ' ' && str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '*') || (str[i - 1] == '+' && str[i] != '+' && str[i + 1] != '{') || (str[i] == '+' && str[i - 1] != '+' && str[i + 1] != '+' &&str[i - 1] != ' ' && str[i - 1] != '\'') || (str[i - 1] == '-' && str[i] != '-') || (str[i] == '-' && str[i - 1] != '-' && str[i + 1] != '-' && str[i - 1] != ' ' && str[i - 1] != '\'') || str[i - 1] == '*' || (str[i - 1] == '&' && str[i - 2] == '&') || (str[i] == '&' && str[i + 1] == '&') || (str[i] == '|' && str[i + 1] == '|') || (str[i - 1] == '|' && str[i] == '|') || str[i] == '*' || (str[i - 1] == '/') || (str[i] == '/' && str[i - 1] != ' ') || str[i - 1] == '%' || ((str[i - 1] == '<' || str[i - 1] == '>') && str[i] != '\'' && str[i] != '=') || ((str[i] == '>' || str[i] == '<') && str[i - 1] != ' ' && str[i - 1] != '\'') || str[i - 1] == ',' || str[i - 1] == ';' || (str[i - 1] == '(' && str[i] != ')') || (str[i] == ')' && str[i - 1] != ' ' && str[i - 1] != '(' &&str[i + 1] != '{') || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ') { fprintf(res, " "); } } return i; } void read(FILE* f, char* str, int size) { int i = 0; int j = 0; char *mas = (char*)malloc(size * sizeof(char)); while (fgets(mas, size, f) != NULL) { j = 0; while (mas[j] != '\0') { if (mas[j] == '"' && mas[j - 1] != '\'') { while (mas[j + 1] != '"') { str[i] = mas[j]; i++; j++; } str[i] = mas[j]; i++; j++; } if (mas[j] != '\t' ) { str[i] = mas[j]; if (i > 0) { if (str[i] == ' ') { if ((str[i - 1] >= 'A' && str[i - 1] <= 'Z') || (str[i - 1] >= 'a' && str[i - 1] <= 'z') || (str[i - 1] == ']')) { i++; } } else i++; } else i++; } j++; } j++; } str[i] = NULL; free(mas); } void format(char * str, int size) { int count = 0; int i = 0; int j = 0; FILE* res = fopen("result.txt", "w"); if (res == NULL) perror("Ошибка открытия файла"); else { while (str[i] != NULL) { if (str[i] == '"' && str[i + 1] != '\'') { if (str[i - 1] == '(' || str[i-1] == ',' || str[i-1] == '=') { fprintf(res, " "); } fprintf(res, "%c", str[i]); i++; while (str[i] != '"') { fprintf(res, "%c", str[i]); i++; } } if (str[i - 1] == '=' && str[i] == '{') { i = init_mas_format(res, str, i); } /* //////////////////////////////////// / / /*/ if (str[i - 1] == ';' && str[i] != '\'' && str[i] != '\n') { fprintf(res, "\n"); for (j = 0; j < count; j++) { fprintf(res, "\t"); } } if (str[i - 1] == '\n' && str[i] != '}') { for (j = 0; j < count; j++) { fprintf(res, "\t"); } } else { if (str[i - 1] == '{' && str[i] != '\'' && str[i] !='}' && str[i+1] !='}' && str[i-2] != '=') { count++; if (str[i] != '\n') { fprintf(res, "\n"); for (j = 0; j < count; j++) { fprintf(res, "\t"); } } else { for (j = 0; j < count; j++) { fprintf(res, "\t"); } } } else if (str[i] == '}' && str[i - 1] != '\'' && str[i-1] != '{' ) { count--; if (str[i-1] != '\n') { fprintf(res, "\n"); for (j = 0; j < count; j++) { fprintf(res, "\t"); } } else { for (j = 0; j < count; j++) { fprintf(res, "\t"); } } fprintf(res, "%c", str[i]); i++; } if (str[i] == '{' && str[i - 1] != '\n' && str[i-1] !='\'' && str[i+1] != '}') { fprintf(res, "\n"); for (j = 0; j < count; j++) { fprintf(res, "\t"); } } } /* //////////////////////////////////////////// / / / */ if (i > 0) { if (str[i - 1] == '\'' && str[i] == '\'' && str[i - 2] != '\\') { fprintf(res, " "); } if ((str[i] == ' ' && (str[i + 1] == ',' || str[i + 1] == ']'))) { fprintf(res, "%c", str[i + 1]); i = i + 2; } if (str[i - 1] == '&' && str[i - 2] != '&' && str[i] != '\'') { fprintf(res, "%c", str[i]); i++; } if ((str[i] == ' ' && str[i + 1] == '-' && str[i + 2] == '>') || (((str[i + 1] == '+' && str[i + 2] == '+') || (str[i + 1] == '-' && str[i + 2] == '-')))) { if (str[i] != ' ') { fprintf(res, "%c%c%c", str[i],str[i + 1], str[i + 2]); i = i + 3; } else { fprintf(res, "%c%c", str[i + 1], str[i + 2]); i = i + 3; } } if (str[i] == 'f' && str[i + 1] == 'o' && str[i + 2] == 'r' && ((str[i + 3] == '(') || ((str[i + 4] == '(') && str[i + 3] == ' '))) { i = for_format(res, str, i); } if (((str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '!' || str[i] == '>' || str[i] == '<')) && str[i + 1] == '=') { if (str[i - 1] != ' ') { fprintf(res, " "); } fprintf(res, "%c", str[i]); i++; fprintf(res, "%c", str[i]); i++; } if (str[i] == '*' && !(str[i - 1] >= 'a' && str[i - 1] <= 'z') && str[i - 1] != ' ') { fprintf(res, " "); } if (((str[i - 1] == '=' && str[i] != '=' && str[i] != ' ' && str[i] != '+' && str[i] != '-' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '<' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i] == '>' && str[i - 1] != ' ' && str[i - 1] != '-' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '!' && str[i - 1] != '+' && str[i - 1] != '-' && str[i - 1] != '*') || (str[i - 1] == '+' && str[i] != '+' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '+' && str[i + 1] != '+' &&str[i - 1] != '=' && str[i - 1] != '=' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '+' && str[i - 1] != ' ') || (str[i] == '&' && str[i + 1] == '&' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i] == '|' && str[i + 1] == '|' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i - 1] == '|' && str[i] != '|' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '-' && str[i] != '-' && str[i] != '>' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '-' && str[i - 1] != '-' &&str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '=' && str[i + 1] != '-' && str[i + 1] != '>') || (str[i - 1] == '&' && str[i - 2] == '&' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '*' && str[i] != ' ' && str[i] != '=' && str[i] != '*' && str[i] != '"' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '*' && str[i - 1] != '*' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i - 1] == '/'&& str[i] != '/' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '/' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i - 1] == '%' && (str[i] != '\'' || str[i - 2] != '\'') && !(str[i] >= 'a' && str[i] <= 'z')) || ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && str[i - 2] != '-') || (str[i - 1] == ',' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '(' && str[i] != ')' && str[i] != '(' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == ')' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ' && str[i - 1] != '(' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ' && str[i] != ';') { fprintf(res, " "); } } if (str[i] != '\0') { fprintf(res, "%c", str[i]); } else break; i++; } } fclose(res); }
#include "Header.h" int main() { FILE * f = fopen("source.txt", "r"); int size; fseek(f, 0, SEEK_END); size = ftell(f); fseek(f, 0, SEEK_SET); int i = 0; char* str = (char*)malloc(size * sizeof(char)); if (f == NULL) perror("Ошибка открытия файла"); else { read(f,str,size); format(str, size); } free(str); fclose(f); return 0; }
#include < malloc.h > #include < stdio.h > int for_format(FILE* res, char * str, int i); void format(char * str, int size); void read(FILE* f,char * str,int size); int init_mas_format(FILE* res, char* str, int i);
Решение задачи: «Отформатировать файл с программой на языке С»
textual
Листинг программы
if (((str[i - 1] == '=' && str[i] != '=' && str[i] != ' ' && str[i] != '+' && str[i] != '-' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '<' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i] == '>' && str[i - 1] != ' ' && str[i - 1] != '-' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i] == '='&& str[i - 1] != '=' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '>' && str[i - 1] != '<' && str[i - 1] != '!' && str[i - 1] != '+' && str[i - 1] != '-' && str[i - 1] != '*') || (str[i - 1] == '+' && str[i] != '+' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '+' && str[i + 1] != '+' &&str[i - 1] != '=' && str[i - 1] != '=' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '+' && str[i - 1] != ' ') || (str[i] == '&' && str[i + 1] == '&' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i] == '|' && str[i + 1] == '|' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i - 1] == '|' && str[i] != '|' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '-' && str[i] != '-' && str[i] != '>' && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '-' && str[i - 1] != '-' &&str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != '=' && str[i + 1] != '-' && str[i + 1] != '>') || (str[i - 1] == '&' && str[i - 2] == '&' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '*' && str[i] != ' ' && str[i] != '=' && str[i] != '*' && str[i] != '"' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '*' && str[i - 1] != '*' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ') || (str[i - 1] == '/'&& str[i] != '/' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '/' && str[i - 1] != ' ' && (str[i - 1] != '\'' || str[i + 1] != '\'')) || (str[i - 1] == '%' && (str[i] != '\'' || str[i - 2] != '\'') && !(str[i] >= 'a' && str[i] <= 'z')) || ((str[i - 1] == '>' || str[i - 1] == '<') && str[i] != '=' && (str[i] != '\'' || str[i - 2] != '\'') && str[i - 2] != '-') || (str[i - 1] == ',' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i - 1] == '(' && str[i] != ')' && str[i] != '(' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == ')' && (str[i - 1] != '\'' || str[i + 1] != '\'') && str[i - 1] != ' ' && str[i - 1] != '(' && (str[i] != '\'' || str[i - 2] != '\'')) || (str[i] == '!' && str[i - 1] != ' ')) && str[i] != ' ' && str[i] != ';') { fprintf(res, " "); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д