fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_PATH_LEN 1024
  5.  
  6. void print_menu() {
  7. printf("1. Указать путь к текстовому файлу\n");
  8. printf("-1. Выход\n");
  9. printf("Выберите пункт меню: ");
  10. }
  11.  
  12. int read_line(char *buffer, size_t size) {
  13. if (fgets(buffer, (int)size, stdin) == NULL) {
  14. return 0;
  15. }
  16.  
  17. char *p = buffer;
  18. while (*p != '\0') {
  19. if (*p == '\n') {
  20. *p = '\0';
  21. break;
  22. }
  23. p++;
  24. }
  25. return 1;
  26. }
  27.  
  28. void process_file(const char *filepath) {
  29. FILE *f = fopen(filepath, "r");
  30. if (!f) {
  31. printf("n/a\n");
  32. return;
  33. }
  34.  
  35. int c = fgetc(f);
  36. if (c == EOF) {
  37. fclose(f);
  38. printf("n/a\n");
  39. return;
  40. }
  41.  
  42. putchar(c);
  43.  
  44. while ((c = fgetc(f)) != EOF) {
  45. putchar(c);
  46. }
  47. fclose(f);
  48. putchar('\n');
  49. }
  50.  
  51. int main(void) {
  52. char input[MAX_PATH_LEN];
  53.  
  54. while (1) {
  55. print_menu();
  56. if (!read_line(input, sizeof(input))) {
  57. break;
  58. }
  59.  
  60. if (input[0] == '-' && input[1] == '1' && input[2] == '\0') {
  61. break;
  62. }
  63.  
  64. if (input[0] == '1' && (input[1] == ' ' || input[1] == '\t')) {
  65. char *path = input + 2;
  66. while (*path == ' ' || *path == '\t')
  67. path++;
  68. if (*path == '\0') {
  69. printf("n/a\n");
  70. continue;
  71. }
  72. process_file(path);
  73. continue;
  74. }
  75.  
  76. printf("n/a\n");
  77. }
  78.  
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
1. Указать путь к текстовому файлу
-1. Выход
Выберите пункт меню: