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 linescounterforscr(FILE* inputStream, FILE* outputStream);
- void identificatorsCounter(FILE* inputStream, FILE* outputStream);
- int fileToFile(void);
- int fileToScreen(void);
- int screenToFile(void);
- int screenToScreen(void);
- int menu()
- {
- int i;
- printf(" ________/МЕНЮ\\_________________\n");
- printf("| | \n");
- printf("| 1.ОТ ФАЙЛ ВЪВ ФАЙЛ | \n");
- printf("| 2.ОТ ФАЙЛ НА ЕКРАНА | \n");
- printf("| 3.ОТ КЛАВИАТУРАТА ВЪВ ФАЙЛ |\n");
- printf("| 4.ОТ КЛАВИАТУРАТА НА ЕКРАНА |\n");
- printf("| 0.Изход |\n");
- printf("|_______________________________|\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: fileToFile();
- break;
- case 2: fileToScreen();
- break;
- case 3: screenToFile();
- break;
- case 4: screenToScreen();
- break;
- default:
- return 0;
- }
- system("pause");
- }
- }
- int fileToFile(void)
- {
- char inputFileName[256], outputFileName[256];
- FILE *inputStream, *outputStream;
- do
- {
- printf("Въведете името на файла, който съдържа програмата(.C): ");
- fgets(inputFileName, 255, stdin);
- inputFileName[strlen(inputFileName) - 1] = 0;
- } while ((inputFileName[strlen(inputFileName) - 2] == '.' && (inputFileName[strlen(inputFileName) - 1]) == 'C'));
- if (!(inputStream = fopen(inputFileName, "r")))
- {
- printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
- return 1;
- }
- printf("Въведете името на файла, в който да се запише резултата: ");
- fgets(outputFileName, 255, stdin);
- outputFileName[strlen(outputFileName) - 1] = 0;
- if (!(outputStream = fopen(outputFileName, "w")))
- {
- printf("Грешка при отварянето на файла за запис на резултата. \n");
- return 1;
- }
- linescounterforscr(inputStream, outputStream);
- rewind(inputStream);
- identificatorsCounter(inputStream, outputStream);
- fclose(inputStream);
- fclose(outputStream);
- printf("Резултатите са записани в \"%s\".\n", outputFileName);
- return 0;
- }
- int fileToScreen(void)
- {
- char inputFileName[256];
- FILE* inputStream;
- printf("Въведете името на файла, който съдържа програмата(.C): ");
- fgets(inputFileName, 255, stdin);
- inputFileName[strlen(inputFileName) - 1] = 0;
- if (!(inputStream = fopen(inputFileName, "r")))
- {
- printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
- return 1;
- }
- linescounterforscr(inputStream, stdout);
- rewind(inputStream);
- identificatorsCounter(inputStream, stdout);
- fclose(inputStream);
- return 0;
- }
- int screenToFile(void)
- {
- char outputFileName[256];
- FILE *outputStream, *tempStream, *opened;
- char str[1000];
- tempStream = fopen("temp.txt", "w");
- printf("Въведете текст, за спиране на въвеждането напишете \"save\" на нов ред\n");
- do {
- fgets(str, 999, stdin);
- if (strcmp(str, "save\n"))fprintf(tempStream, "%s", str);
- } while (strcmp(str, "save\n"));
- fclose(tempStream);
- if ((opened = fopen("temp.", "r")) == NULL)
- {
- printf("Грешка при четенето на програмата от клавиатурата.\n");
- return 1;
- }
- printf("Въведете името на файла за запис на резултата:\n");
- if (!fgets(outputFileName, 255, stdin))
- {
- printf("Грешка при въвеждането на име на файла за запис .\n");
- return 1;
- }
- outputFileName[strlen(outputFileName) - 1] = 0;
- if (!(outputStream = fopen(outputFileName, "w")))
- {
- printf("Грешка при отварянето на файла за запис.\n");
- return 1;
- }
- linescounterforscr(opened, outputStream);
- rewind(opened);
- identificatorsCounter(opened, outputStream);
- fclose(opened);
- fclose(outputStream);
- printf("Резултатите са записани в \"%s\".\n", outputFileName);
- return 0;
- }
- int screenToScreen(void)
- {
- FILE *tempStream, *opened;
- char str[999];
- if (!(tempStream = fopen("temp.txt", "w")))
- {
- printf("Грешка при отварянето на файл за запис.\n");
- return 1;
- }
- printf("Въведете текст, за спиране на въвеждането напишете \"save\" на нов ред\n");
- do {
- fgets(str, 999, stdin);
- if (strcmp(str, "save\n"))fprintf(tempStream, "%s", str);
- } while (strcmp(str, "save\n"));
- fclose(tempStream);
- if ((opened = fopen("temp.txt", "r")) == NULL)
- {
- printf("Грешка при отварянето на файл за четене.\n");
- return 1;
- }
- linescounterforscr(tempStream, stdout);
- rewind(tempStream);
- identificatorsCounter(tempStream, stdout);
- fclose(opened);
- return 0;
- }
- void linescounterforscr(FILE* inputStream, FILE* outputStream)
- {
- char c;
- int broi = 0;
- do {
- c = fgetc(inputStream);
- if (c == '\n' || c == EOF) broi++;
- } while (c != EOF);
- fprintf(outputStream, " Броя на редовете в програмата е:%d\n", broi);
- }
- void identificatorsCounter(FILE* inputStream, FILE* outputStream) {
- 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;
- 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(outputStream, "Броят на операторите в програмата е: %d\n", logical);
- }
Advertisement
Add Comment
Please, Sign In to add comment