#define _CRT_SECURE_NO_WARNINGS #include #include #include #include int Readfiletofile(); int Readfiletoscreen(); int Readceyboardtofile(); int Readceyboardtoscreen(); int main() { int choice; SetConsoleOutputCP(1251); SetConsoleCP(1251); printf(" Меню:\n"); printf("1:четене програмата от файл и запис на резултата във файл\n(потребителят трябва да въведе имената на двата файла, като файла с програмата трябва да завършва с '.С')\n\n"); printf("2:четене програмата от файл и извеждане на резултата на екрана\n(файлът въведен от потребителят трябва да завършва на '.С')\n\n"); printf("3:четене на програмата от клавиатура и извеждане във файл зададен от потребителя\n\n"); printf("4:четене на програмата от клавиатурата и извеждане на екрана\n\n"); printf("Напишете вашия избор:"); scanf("%d", &choice); //фактически параметър switch (choice) { case 1: system("cls"); Readfiletofile(); printf("Резултатите са във файла"); break; case 2: system("cls"); Readfiletoscreen(); break; case 3: system("cls"); Readceyboardtofile(); printf("Резултатите са във файла"); break; case 4: system("cls"); Readceyboardtoscreen(); break; default: printf("ГРЕШКА!"); } system("pause"); return 0; } int Readfiletofile() { char line[300]; int string_flag = 1, comment_flag = 1; int emptyLine = 0; int logical = 0; char fpname[255], newfpname[255]; printf("Въведи името на файла за четене :\n"); scanf("%s", fpname); printf("Въведи името на файла за запис на резултата:\n"); scanf("%s", newfpname); FILE *fp = fopen(fpname, "r"); if (fp == NULL) { printf("ГРЕШКА: Файлът не може да се отвори!\n"); return -1; } else if (fpname[strlen(fpname) - 2] != '.'&& fpname[strlen(fpname) - 1] != 'c') { printf("ГРЕШКА: Файлът не е с правилното разширение!\n"); return -1; } while (fgets(line, 300, fp)) { int i = 0; int len = strlen(line); emptyLine++; for (i = 0; i < len; i++) { if ((line[i] == '"') && (line[i - 1] != '\\')) { if (string_flag == 1) string_flag--; else string_flag++; } if ((line[i] == '/') && (line[i + 1] == '/')) break; if ((line[i] == '/') && (line[i + 1] == '*')) comment_flag--; if ((line[i] == '*') && (line[i + 1] == '/')) comment_flag++; if (line[i] != '\n' && line[i] != '\t' && line[i] != ' ') { emptyLine--; break; } } if (string_flag && comment_flag) { if (line[i] == 'f' && line[i + 1] == 'o'&&line[i + 2] == 'r' || line[i] == 'w' && line[i + 1] == 'h'&&line[i + 2] == 'i'&&line[i + 3] == 'l' && line[i + 4] == 'e'||line[i]=='d'&&line[i+1]=='o'&&line[i+2]=='{'|| line[i] == 'd'&&line[i + 1] == 'o'&&line[i + 3] == '{') { logical++; } } } fclose(fp); if (newfpname[strlen(newfpname) - 2] != '.'&& newfpname[strlen(newfpname) - 1] != 'c') { printf("ГРЕШКА: Файлът не е с правилното разширение!\n"); return -1; } FILE *newfp = fopen(newfpname, "w"); if (newfp) { fprintf(newfp, "Празните редове са : %d, \n Операторите за цикъл са: %d", emptyLine, logical); } fclose(newfp); return 0; } int Readfiletoscreen() { char line[300]; int string_flag = 1, comment_flag = 1; int emptyLine = 0; int logical = 0; char fpname[255], newfpname[255]; printf("Въведи името на файла за четене :\n"); scanf("%s", fpname); FILE *fp = fopen(fpname, "r"); if (fp == NULL) { printf("ГРЕШКА: Файлът не може да се отвори!\n"); return -1; } else if (fpname[strlen(fpname) - 2] != '.'&& fpname[strlen(fpname) - 1] != 'c') { printf("ГРЕШКА: Файлът не е с правилното разширение!\n"); return -1; } else while (fgets(line, 300, fp)) { int i = 0; int len = strlen(line); emptyLine++; for (i = 0; i < len; i++) { if ((line[i] == '"') && (line[i - 1] != '\\')) { if (string_flag == 1) string_flag--; else string_flag++; } if ((line[i] == '/') && (line[i + 1] == '/')) break; if ((line[i] == '/') && (line[i + 1] == '*')) comment_flag--; if ((line[i] == '*') && (line[i + 1] == '/')) comment_flag++; if (line[i] != '\n' && line[i] != '\t' && line[i] != ' ') { emptyLine--; break; } } if (string_flag && comment_flag) { if (line[i] == 'f' && line[i + 1] == 'o'&&line[i + 2] == 'r' || line[i] == 'w' && line[i + 1] == 'h'&&line[i + 2] == 'i'&&line[i + 3] == 'l' && line[i + 4] == 'e' || line[i] == 'd'&&line[i + 1] == 'o'&&line[i + 2] == '{' || line[i] == 'd'&&line[i + 1] == 'o'&&line[i + 3] == '{') { logical++; } } } printf("Празните редове са : %d, \n Операторите за цикъл са: %d", emptyLine, logical); return 0; } int Readceyboardtofile() { char line[300]; int string_flag = 1, comment_flag = 1; int emptyLine = 0; int logical = 0; char newfpname[255]; printf("Въведи името на файла за запис на резултата:\n"); scanf("%s", newfpname); printf("Напиши програмата:(за край на програмата натиснете CTR+Z)\n"); scanf("%s", &line); while (fgets(line, 300, stdin)) { int i = 0; int len = strlen(line); emptyLine++; for (i = 0; i < len; i++) { if ((line[i] == '"') && (line[i - 1] != '\\')) { if (string_flag == 1) string_flag--; else string_flag++; } if ((line[i] == '/') && (line[i + 1] == '/')) break; if ((line[i] == '/') && (line[i + 1] == '*')) comment_flag--; if ((line[i] == '*') && (line[i + 1] == '/')) comment_flag++; if (line[i] != '\n' && line[i] != '\t' && line[i] != ' ') { emptyLine--; break; } } if (string_flag && comment_flag) { if (line[i] == 'f' && line[i + 1] == 'o'&&line[i + 2] == 'r' || line[i] == 'w' && line[i + 1] == 'h'&&line[i + 2] == 'i'&&line[i + 3] == 'l' && line[i + 4] == 'e' || line[i] == 'd'&&line[i + 1] == 'o'&&line[i + 2] == '{' || line[i] == 'd'&&line[i + 1] == 'o'&&line[i + 3] == '{') { logical++; } } } FILE *newfp = fopen(newfpname, "w"); if (newfp) { fprintf(newfp, "Празните редове са : %d, \n Операторите за цикъл са: %d", emptyLine, logical); } fclose(newfp); return 0; } int Readceyboardtoscreen() { char line[300]; int flag = 0, flag1 = 0; int emptyLine = 0; int logical = 0; unsigned i; printf("Напиши програмата:(за край на програмата натиснете CTR+Z)\n"); scanf("%s", &line); while (fgets(line, 300, stdin)) { int len = strlen(line); emptyLine++; for (i = 0; i < len; i++) { if (line[i] == '\"' && !flag) flag = 1; // ne tyrsim v kavi4kite; else if (line[i] == '\"' && line[i - 1] != '\\' && flag == 1) flag = 0; if (!flag && line[i] == '/' && line[i + 1] == '/') break; // pri nalicieto na Cpp krai na tyrseneto v tozi red; if (!flag && line[i] == '/' && line[i + 1] == '*') flag = 2;// ne tyrsim v C komentarite; else if (flag == 2 && line[i] == '*' && line[i + 1] == '/') flag = 0; if (!flag) { if (!i || (i && (line[i - 1] == ' ' || line[i - 1] == '\t' || line[i - 1] == '{' || line[i - 1] == '}' || line[i - 1] == '(' || line[i - 1] == ')'))) { if (line[i] == 'f' && line[i + 1] == 'o' && line[i + 2] == 'r' ) { logical++; flag1 = 1; } else if (line[i] == 'w' && line[i + 1] == 'h' && line[i + 2] == 'i'&& line[i + 3] == 'h'&& line[i + 4] == 'l'&& line[i + 5] == 'e') { logical++; flag1 = 1; } } } if (flag1 && line[i] == ',') logical++; else if (flag1 && line[i] == ';') flag1 = 0; if (line[i] != '\n' && line[i] != '\t' && line[i] != ' ') { emptyLine--; break; } } } } printf("Празните редове са : %d, \n Операторите за цикъл са: %d", emptyLine, logical); if(line[strlen(line) - 1] == EOF) return 0; }