Advertisement
salron3

Emo2

Jan 12th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.67 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <Windows.h>// за меюто на кирилица
  6.  
  7. #define SIZE 256
  8. #define NAMES 128
  9.  
  10. // Прототипи на функциите използвани по долу
  11. int menu();
  12. void getFileName(char* fileName, int mode);
  13. void GetNumberOfOperators(FILE *inputFile, FILE *outputFile);
  14.  
  15. int FileToScreen();
  16. int ScreenToScreen();
  17.  
  18. int main()
  19. {
  20.     while (1)
  21.     {
  22.         switch (menu())
  23.         {
  24.         case 1:
  25.             FileToScreen();
  26.             break;
  27.         case 2:
  28.             ScreenToScreen();
  29.             break;
  30.         case 0:
  31.             exit(0);
  32.         default:
  33.             break;
  34.         }
  35.  
  36.         system("pause");
  37.         system("cls");
  38.     }
  39.     return 0;
  40. }
  41.  
  42. int menu()
  43. {
  44.     int i;
  45.  
  46.     SetConsoleCP(1251);
  47.     SetConsoleOutputCP(1251);
  48.  
  49.     printf("---------------------------------------------\n");
  50.     printf("|1. Четене от файл и писане на екрана       |\n");
  51.     printf("|2. Четене от клавиатура и писане на екрана |\n");
  52.     printf("|0. Изход                                   |\n");
  53.     printf("---------------------------------------------\n");
  54.  
  55.     do //while (i<0 || i>4);
  56.     {
  57.         fflush(stdin);// Чисти буфера
  58.         printf("Изберете Опция: ");
  59.         scanf("%d", &i);
  60.     } while (i<0 || i>3);// Позволява въвеждане на числа само между 0 и 2
  61.     return i;// Връщаме избраната стойност
  62. }
  63.  
  64. void getFileName(char* fileName, int mode) /// 1 TO OPEN A FILE TO READ /// 2 TO OPEN A FILE TO WRITE ///
  65. {
  66.     while (1)// Безкраен цикъл
  67.     {
  68.         fflush(stdin);
  69.         if (mode == 1) // Ако е подадено 1 ще се изисква потребителя да въведе име на файл за четене
  70.         {
  71.             printf("Въведете име на файл за четене (.c/.txt): ");
  72.             scanf("%s", fileName);      ///gets(fileName);
  73.  
  74.             if (fileName[strlen(fileName) - 4] == '.' && toupper(fileName[strlen(fileName) - 3]) == 'T' && toupper(fileName[strlen(fileName) - 2]) == 'X' && toupper(fileName[strlen(fileName) - 1]) == 'T')
  75.             {
  76.                 return;
  77.             }
  78.  
  79.             if (fileName[strlen(fileName) - 2] == '.' && toupper(fileName[strlen(fileName) - 1]) == 'C')// Проверка дали файла завършва на .С
  80.             {
  81.                 return;// Ако завършва се излиза от функцията
  82.             }
  83.         }
  84.  
  85.         if (mode == 2)// При мод 2 се въвежда име на файла за запис
  86.         {
  87.             printf("Въведете име на файл за запис (.c/.txt): ");
  88.             scanf("%s", fileName);      ///gets(fileName);
  89.  
  90.             if (fileName[strlen(fileName) - 4] == '.' && toupper(fileName[strlen(fileName) - 3]) == 'T' && toupper(fileName[strlen(fileName) - 2]) == 'X' && toupper(fileName[strlen(fileName) - 1]) == 'T')
  91.             {
  92.                 return;
  93.             }
  94.  
  95.             if (fileName[strlen(fileName) - 2] == '.' && toupper(fileName[strlen(fileName) - 1]) == 'C')
  96.             {
  97.                 return;
  98.             }
  99.         }
  100.     }
  101. }
  102.  
  103. void GetNumberOfOperators(FILE *inputFile, FILE *outputFile)
  104. {
  105.     int countOfEquals = 0, flag = 0;
  106.     char line[SIZE];
  107.     while (fgets(line, sizeof(line), inputFile) != NULL) //Четене ред по ред
  108.     {
  109.         for (size_t i = 0; i < strlen(line); i++)
  110.         {
  111.  
  112.             if (line[i] == '\"' && !flag) flag = 1; // не търсим в къвичките
  113.             else if (line[i] == '\"' && line[i - 1] != '\\' && flag == 1) flag = 0;
  114.  
  115.             if (!flag && line[i] == '/' && line[i + 1] == '/') break; // при наличието на коментар спираме да четем реда
  116.  
  117.             if (!flag && line[i] == '/' && line[i + 1] == '*') flag = 2;// не търсим в големите коментари / *
  118.             else if (flag == 2 && line[i] == '*' && line[i + 1] == '/') flag = 0;
  119.  
  120.             if (line[i] == '\'' && !flag) flag = 3; // не търсим в апострофите;
  121.             else if (line[i] == '\'' && flag == 3) flag = 0;
  122.  
  123.             if (!flag)
  124.             {
  125.                 if (line[i] == '=' && line[i + 1] == '=' )// Ако има намерен оператор '==', увеличаваме брояча с 1
  126.                 {
  127.                     countOfEquals++;
  128.                 }
  129.             }
  130.         }
  131.     }
  132.     fprintf(outputFile, "Броят на операторите '=='(еднакво) е: %d\n", countOfEquals);// Запис на информацията
  133. }
  134.  
  135. int FileToScreen()
  136. {
  137.     char readFile[NAMES] = { 0 };
  138.     FILE* inputFile;
  139.     getFileName(readFile, 1);
  140.  
  141.     inputFile = fopen(readFile, "r");// Отваряне на файла за четене
  142.     if (inputFile == NULL)
  143.     {
  144.         fprintf(stderr, "CANNOT OPEN FILE!");
  145.         return;
  146.     }
  147.  
  148.     GetNumberOfOperators(inputFile, stdout);// stdout e изходен поток за данни. Той превръща fprintf-a в обикновен printf
  149.     rewind(inputFile);// Връща файловия поинтър към началото на файла(за да може пак да се прочете)
  150.  
  151.     fclose(inputFile);
  152.  
  153.     return 0;
  154. }
  155.  
  156. int ScreenToScreen()// Тук нещата са като по-горе
  157. {
  158.     char  manage[SIZE], c = 0;
  159.     int counter = 0;
  160.     FILE *tempBuffer;
  161.  
  162.     tempBuffer = fopen("TempChanges.tmp", "w");
  163.  
  164.     printf("\nНапишете текст под чертата и напишете \"exit\" на нов ред за да запазите информацията\n");
  165.     printf("________________________________________________________________________________\n");
  166.     fflush(stdin);
  167.  
  168.     while (1)
  169.     {
  170.         gets(manage);
  171.         if (!strcmp(manage, "exit"))
  172.         {
  173.             fclose(tempBuffer);
  174.             tempBuffer = fopen("TempChanges.tmp", "r");
  175.             break;
  176.         }
  177.         fprintf(tempBuffer, "%s\n", manage);
  178.     }
  179.  
  180.     system("CLS");
  181.     printf("Информация:\n");
  182.  
  183.     GetNumberOfOperators(tempBuffer, stdout);
  184.     rewind(tempBuffer);
  185.  
  186.     fclose(tempBuffer);
  187.  
  188.     return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement