Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<ctype.h>
- #include<locale.h>
- void lines_counter(FILE* inputStream, FILE* outputStream);
- void logical_counter(FILE* inputStream, FILE* outputStream);
- int file_to_file(void);
- int file_to_screen(void);
- int screen_to_file(void);
- int screen_to_screen(void);
- int menu()
- {
- int i;
- printf(" МЕНЮ:\n");
- printf("1:четене програмата от файл и запис на резултата във файл(потребителят трябва да въведе имената на двата файла,\n като файла с програмата трябва да завършва с '.С')\n\n");
- printf("2:четене програмата от файл и извеждане на резултата на екрана\n(файлът въведен от потребителят трябва да завършва на '.С')\n\n");
- printf("3:четене на програмата от клавиатура и извеждане във файл зададен от потребителя\n\n");
- printf("4:четене на програмата от клавиатурата и извеждане на екрана\n\n");
- do {
- printf("Напишете вашия избор: ");
- scanf("%d", &i);
- while (getchar() != '\n');
- } while (i < 0 || i> 4);
- return i;
- }
- int main(void)
- {
- setlocale(LC_ALL, "");
- while (1)
- {
- system("cls");
- switch (menu())
- {
- case 1: file_to_file();
- break;
- case 2: file_to_screen();
- break;
- case 3: screen_to_file();
- break;
- case 4: screen_to_screen();
- break;
- default:
- return 0;
- }
- system("pause");
- }
- }
- int file_to_file(void)
- {
- char input_file_name[256], output_file_name[256];
- FILE *input_stream, *output_stream;
- do
- {
- printf("Въведете името на файла, който съдържа програмата(.C):\n ");
- fgets(input_file_name, 255, stdin);
- input_file_name[strlen(input_file_name) - 1] = 0;
- } while ((input_file_name[strlen(input_file_name) - 2] == '.' && (input_file_name[strlen(input_file_name) - 1]) == 'C'));
- if (!(input_stream = fopen(input_file_name, "r")))
- {
- printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
- return 1;
- }
- printf("Въведете името на файла, в който да се запише резултата:\n ");
- fgets(output_file_name, 255, stdin);
- output_file_name[strlen(output_file_name) - 1] = 0;
- if (!(output_stream = fopen(output_file_name, "w")))
- {
- printf("Грешка при отварянето на файла за запис на резултата. \n");
- return 1;
- }
- lines_counter(input_stream, output_stream);
- rewind(input_stream);
- logical_counter(input_stream, output_stream);
- fclose(input_stream);
- fclose(output_stream);
- printf("Резултатите са записани в \"%s\".\n", output_file_name);
- return 0;
- }
- int file_to_screen(void)
- {
- char input_file_name[256];
- FILE* input_stream;
- printf("Въведете името на файла, който съдържа програмата(.C): \n");
- fgets(input_file_name, 255, stdin);
- input_file_name[strlen(input_file_name) - 1] = 0;
- if (!(input_stream = fopen(input_file_name, "r")))
- {
- printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
- return 1;
- }
- lines_counter(input_stream, stdout);
- rewind(input_stream);
- logical_counter(input_stream, stdout);
- fclose(input_stream);
- return 0;
- }
- int screen_to_file(void)
- {
- char outputFileName[256];
- FILE *out_put_stream, *temp_stream, *opened;
- char str[1000];
- temp_stream = fopen("temp.txt", "w");
- printf("Въведете текст, за спиране на въвеждането напишете \"stop\" на нов ред\n");
- do {
- fgets(str, 999, stdin);
- if (strcmp(str, "stop\n"))fprintf(temp_stream, "%s", str);
- } while (strcmp(str, "stop\n"));
- fclose(temp_stream);
- if ((opened = fopen("temp.txt", "r")) == NULL)
- {
- printf("Грешка при четенето на програмата от клавиатурата.\n");
- return 1;
- }
- printf("Въведете името на файла за запис на резултата:\n");
- if (!fgets(outputFileName, 255, stdin))
- {
- printf("Грешка при въвеждането на име на файла за запис .\n");
- return 1;
- }
- outputFileName[strlen(outputFileName) - 1] = 0;
- if (!(out_put_stream = fopen(outputFileName, "w")))
- {
- printf("Грешка при отварянето на файла за запис.\n");
- return 1;
- }
- lines_counter(opened, out_put_stream);
- rewind(opened);
- logical_counter(opened, out_put_stream);
- fclose(opened);
- fclose(out_put_stream);
- printf("Резултатите са записани в \"%s\".\n", outputFileName);
- return 0;
- }
- int screen_to_screen(void)
- {
- FILE *temp_stream, *opened;
- char str[999];
- if (!(temp_stream = fopen("temp.txt", "w")))
- {
- printf("Грешка при отварянето на файл за запис.\n");
- return 1;
- }
- printf("Въведете текст, за спиране на въвеждането напишете \"stop\" на нов ред\n");
- do {
- fgets(str, 999, stdin);
- if (strcmp(str, "stop\n"))fprintf(temp_stream, "%s", str);
- } while (strcmp(str, "stop\n"));
- fclose(temp_stream);
- if ((opened = fopen("temp.txt", "r")) == NULL)
- {
- printf("Грешка при отварянето на файл за четене.\n");
- return 1;
- }
- lines_counter(temp_stream, stdout);
- rewind(temp_stream);
- logical_counter(temp_stream, stdout);
- fclose(opened);
- return 0;
- }
- void lines_counter(FILE* inputStream, FILE* outputStream)
- {
- char line[300];
- int emptyLine = 0;
- if (inputStream == NULL) {
- printf("Грешка: Файлът не може да бъде отворен!\n");
- }
- else {
- while (fgets(line, 300, inputStream)) {
- int i = 0;
- int len = strlen(line);
- emptyLine++;
- for (i = 0; i < len; i++) {
- if (line[i] != '\n' && line[i] != '\t' && line[i] != ' ') {
- emptyLine--;
- break;
- }
- }
- }
- fprintf(outputStream, "Броят на празните редове в програмата е: %d\n", emptyLine);
- }
- }
- void logical_counter(FILE* inputStream, FILE* out_put_stream) {
- char line[1000];
- int flag = 0, flag1, logical = 0;
- unsigned i;
- while ((fgets(line, sizeof line, inputStream)) != NULL)
- {
- flag1 = 0;
- for (i = 0; i < strlen(line); i++)
- {
- if (line[i] == '\"' && !flag) flag = 1; /*Не търсим в кавичките*/
- else if (line[i] == '\"' && line[i - 1] != '\\' && flag == 1) flag = 0;
- if (!flag && line[i] == '/' && line[i + 1] == '/') break;
- if (!flag && line[i] == '/' && line[i + 1] == '*') flag = 2;/*Не търсим в коментарите*/
- 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] == 'l'
- && line[i + 4] == 'e')
- {
- logical++;
- flag1 = 1;
- for (int j = 6; j < strlen(line); j++)
- {
- if ((line[i] == 'd') && (line[i + 1] == 'o') && (line[i + 2] == '{') && (flag1 = 1))
- logical++;
- }
- }
- }
- }
- if (flag1 && line[i] == ',') logical++;
- else if (flag1 && line[i] == ';') flag1 = 0;
- }
- }
- fprintf(out_put_stream, "Броят на операторите в програмата е: %d\n", logical);
- }
Advertisement
Add Comment
Please, Sign In to add comment