joannakr

Untitled

Jan 9th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.06 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<ctype.h>
  6. #include<locale.h>
  7. void lines_counter(FILE* inputStream, FILE* outputStream);
  8. void logical_counter(FILE* inputStream, FILE* outputStream);
  9. int file_to_file(void);
  10. int file_to_screen(void);
  11. int screen_to_file(void);
  12. int screen_to_screen(void);
  13. int menu()
  14. {
  15. int i;
  16. printf(" МЕНЮ:\n");
  17. printf("1:четене програмата от файл и запис на резултата във файл(потребителят трябва да въведе имената на двата файла,\n като файла с програмата трябва да завършва с '.С')\n\n");
  18. printf("2:четене програмата от файл и извеждане на резултата на екрана\n(файлът въведен от потребителят трябва да завършва на '.С')\n\n");
  19. printf("3:четене на програмата от клавиатура и извеждане във файл зададен от потребителя\n\n");
  20. printf("4:четене на програмата от клавиатурата и извеждане на екрана\n\n");
  21. do {
  22. printf("Напишете вашия избор: ");
  23. scanf("%d", &i);
  24. while (getchar() != '\n');
  25. } while (i < 0 || i> 4);
  26. return i;
  27. }
  28. int main(void)
  29. {
  30. setlocale(LC_ALL, "");
  31. while (1)
  32. {
  33. system("cls");
  34. switch (menu())
  35. {
  36. case 1: file_to_file();
  37. break;
  38. case 2: file_to_screen();
  39. break;
  40. case 3: screen_to_file();
  41. break;
  42. case 4: screen_to_screen();
  43. break;
  44. default:
  45. return 0;
  46. }
  47. system("pause");
  48. }
  49. }
  50. int file_to_file(void)
  51. {
  52. char input_file_name[256], output_file_name[256];
  53. FILE *input_stream, *output_stream;
  54. do
  55. {
  56. printf("Въведете името на файла, който съдържа програмата(.C):\n ");
  57. fgets(input_file_name, 255, stdin);
  58. input_file_name[strlen(input_file_name) - 1] = 0;
  59. } while ((input_file_name[strlen(input_file_name) - 2] == '.' && (input_file_name[strlen(input_file_name) - 1]) == 'C'));
  60.  
  61. if (!(input_stream = fopen(input_file_name, "r")))
  62. {
  63. printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
  64. return 1;
  65. }
  66. printf("Въведете името на файла, в който да се запише резултата:\n ");
  67. fgets(output_file_name, 255, stdin);
  68. output_file_name[strlen(output_file_name) - 1] = 0;
  69. if (!(output_stream = fopen(output_file_name, "w")))
  70. {
  71. printf("Грешка при отварянето на файла за запис на резултата. \n");
  72. return 1;
  73. }
  74.  
  75. lines_counter(input_stream, output_stream);
  76. rewind(input_stream);
  77. logical_counter(input_stream, output_stream);
  78. fclose(input_stream);
  79. fclose(output_stream);
  80.  
  81. printf("Резултатите са записани в \"%s\".\n", output_file_name);
  82. return 0;
  83. }
  84. int file_to_screen(void)
  85. {
  86. char input_file_name[256];
  87. FILE* input_stream;
  88. printf("Въведете името на файла, който съдържа програмата(.C): \n");
  89. fgets(input_file_name, 255, stdin);
  90.  
  91. input_file_name[strlen(input_file_name) - 1] = 0;
  92. if (!(input_stream = fopen(input_file_name, "r")))
  93. {
  94. printf("Грешка при отварянето на файла.Проверете дали съществува.\n");
  95. return 1;
  96. }
  97.  
  98.  
  99. lines_counter(input_stream, stdout);
  100. rewind(input_stream);
  101. logical_counter(input_stream, stdout);
  102. fclose(input_stream);
  103.  
  104. return 0;
  105. }
  106. int screen_to_file(void)
  107. {
  108. char outputFileName[256];
  109. FILE *out_put_stream, *temp_stream, *opened;
  110. char str[1000];
  111.  
  112. temp_stream = fopen("temp.txt", "w");
  113. printf("Въведете текст, за спиране на въвеждането напишете \"stop\" на нов ред\n");
  114.  
  115. do {
  116. fgets(str, 999, stdin);
  117. if (strcmp(str, "stop\n"))fprintf(temp_stream, "%s", str);
  118. } while (strcmp(str, "stop\n"));
  119. fclose(temp_stream);
  120. if ((opened = fopen("temp.txt", "r")) == NULL)
  121. {
  122. printf("Грешка при четенето на програмата от клавиатурата.\n");
  123. return 1;
  124. }
  125.  
  126. printf("Въведете името на файла за запис на резултата:\n");
  127. if (!fgets(outputFileName, 255, stdin))
  128. {
  129. printf("Грешка при въвеждането на име на файла за запис .\n");
  130. return 1;
  131. }
  132. outputFileName[strlen(outputFileName) - 1] = 0;
  133.  
  134. if (!(out_put_stream = fopen(outputFileName, "w")))
  135. {
  136. printf("Грешка при отварянето на файла за запис.\n");
  137. return 1;
  138. }
  139.  
  140. lines_counter(opened, out_put_stream);
  141. rewind(opened);
  142. logical_counter(opened, out_put_stream);
  143. fclose(opened);
  144. fclose(out_put_stream);
  145.  
  146. printf("Резултатите са записани в \"%s\".\n", outputFileName);
  147. return 0;
  148. }
  149.  
  150.  
  151.  
  152.  
  153.  
  154. int screen_to_screen(void)
  155. {
  156. FILE *temp_stream, *opened;
  157. char str[999];
  158.  
  159. if (!(temp_stream = fopen("temp.txt", "w")))
  160. {
  161. printf("Грешка при отварянето на файл за запис.\n");
  162. return 1;
  163. }
  164. printf("Въведете текст, за спиране на въвеждането напишете \"stop\" на нов ред\n");
  165.  
  166. do {
  167. fgets(str, 999, stdin);
  168. if (strcmp(str, "stop\n"))fprintf(temp_stream, "%s", str);
  169. } while (strcmp(str, "stop\n"));
  170.  
  171. fclose(temp_stream);
  172. if ((opened = fopen("temp.txt", "r")) == NULL)
  173. {
  174. printf("Грешка при отварянето на файл за четене.\n");
  175. return 1;
  176. }
  177. lines_counter(temp_stream, stdout);
  178. rewind(temp_stream);
  179. logical_counter(temp_stream, stdout);
  180. fclose(opened);
  181.  
  182.  
  183. return 0;
  184. }
  185.  
  186.  
  187.  
  188. void lines_counter(FILE* inputStream, FILE* outputStream)
  189. {
  190. char line[300];
  191. int emptyLine = 0;
  192. if (inputStream == NULL) {
  193. printf("Грешка: Файлът не може да бъде отворен!\n");
  194. }
  195. else {
  196. while (fgets(line, 300, inputStream)) {
  197. int i = 0;
  198. size_t line_size = strlen(line);
  199. emptyLine++;
  200. for (i = 0; i < line_size ; i++) {
  201. if (line[i] != '\n' && line[i] != '\t' && line[i] != ' '&& line[i]!='//'&& line[i+1]!='/'&& line[i]!='/'&&line[i+1]!='*') {
  202. emptyLine--;
  203. break;
  204. }
  205. }
  206. }
  207. fprintf(outputStream, "Броят на празните редове в програмата е: %d\n", emptyLine);
  208.  
  209. }
  210. }
  211. void logical_counter(FILE* inputStream, FILE* out_put_stream) {
  212. char line[1000];
  213. int flag = 0, flag1, logical = 0;
  214. unsigned i;
  215. unsigned j;
  216.  
  217. while ((fgets(line, sizeof line, inputStream)) != NULL)
  218. {
  219. flag1 = 0;
  220. for (i = 0; i < strlen(line); i++)
  221. {
  222. if (line[i] == '\"' && !flag) flag = 1; /*Не търсим в кавичките*/
  223. else if (line[i] == '\"' && line[i - 1] != '\\' && flag == 1) flag = 0;
  224.  
  225. if (!flag && line[i] == '/' && line[i + 1] == '/') break;
  226.  
  227. if (!flag && line[i] == '/' && line[i + 1] == '*') flag = 2;/*Не търсим в коментарите*/
  228. else if (flag == 2 && line[i] == '*' && line[i + 1] == '/') flag = 0;
  229.  
  230.  
  231. if (!flag) {
  232. if (!i || (i || line[i - 1] == '\t' || line[i - 1] == '{' || line[i - 1] == '}' || line[i - 1] == '(' || line[i - 1] == ')'))
  233. {
  234. if (line[i] == 'f'
  235. && line[i + 1] == 'o'
  236. && line[i + 2] == 'r'
  237. && line[i + 3] == '(')
  238. {
  239. logical++;
  240. flag1 = 1;
  241. }
  242. else if (line[i] == 'w'
  243. && line[i + 1] == 'h'
  244. && line[i + 2] == 'i'
  245. && line[i + 3] == 'l'
  246. && line[i + 4] == 'e')
  247. {
  248. logical++;
  249. flag1 = 1;
  250. for (j = 6; j < strlen(line); j++)
  251. {
  252. if ((line[i] == 'd')
  253. && (line[i + 1] == 'o')
  254. && (line[i + 2] == '{')
  255. && (flag1 = 1))
  256.  
  257. logical++;
  258. }
  259. }
  260.  
  261.  
  262. }
  263. }
  264.  
  265. if (flag1 && line[i] == ',') logical++;
  266. else if (flag1 && line[i] == ';') flag1 = 0;
  267.  
  268. }
  269. }
  270. fprintf(out_put_stream, "Броят на операторите в програмата е: %d\n", logical);
  271. }
Advertisement
Add Comment
Please, Sign In to add comment