Используя вспомогательный файл H, переписать компоненты файла F в файл G - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан файл F, содержащий целые числа. Никакая из компонент файла не равна нулю. Файл F содержит столько же отрицательных чисел, сколько положительных.

Используя вспомогательный файл H

, переписать компоненты файла F в файл G так, чтобы в файле G сначала шли положительные, потом отрицательные числа. Не получается скомпилировать:много ошибок.Помогите пожалуйста. Мои наработки:
Листинг программы
  1. #include "stdafx.h"
  2. #include "stdlib.h"
  3. #include "stdio.h"
  4. int main()
  5. {
  6. FILE *f;
  7. FILE *h;
  8. FILE *g;
  9. int a;
  10. if ((f=fopen("data1.txt", "r"))==NULL)
  11. printf("Файл f открыть не удалось!\n");
  12. exit(1);
  13. if ((h=fopen("data2.txt", "w"))==NULL)
  14. printf("Файл h открыть не удалось!\n");
  15. exit(2);
  16. }
  17. f=fopen("data1.txt", "r");
  18. fscanf(f, "%d ",&a);
  19. while(!feof(f))
  20. {
  21. if(a>=0)
  22. fprintf(h, "%d ",a);
  23. fscanf(f,"%d ", &a);
  24. }
  25. f=fopen("data1.txt", "r");
  26. fscanf(f, "%d ", &a);
  27. while (!feof(f));
  28. {
  29. if(a<0)
  30. fpintf(h, "%d ", a);
  31. fscanf(f,"%d ",&a);
  32. }
  33. fclose(h);
  34. fclose(f);
  35. {
  36. if(g=fopen("data3.txt", "w")==NULL)
  37. printf("файл g открыть не удалось!\n");
  38. exit(3);
  39. }
  40. h=fopen("data2.txt", "r");
  41. fscanf(h,"%d ",&a);
  42. while(!feof(h))
  43. fprintf(g, "%d ", a);
  44. fscanf(h, "%d ", &a);
  45. fclose(h);
  46. fcose(g);
  47. return 0;
  48. }

Решение задачи: «Используя вспомогательный файл H, переписать компоненты файла F в файл G»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. FILE* Open(const char* name, const char* args) {
  5.     FILE* f = (name == NULL) ? tmpfile() : fopen(name, args);
  6.  
  7.     if (f == NULL) {
  8.         perror(name);
  9.         exit(EXIT_FAILURE);
  10.     }
  11.  
  12.     return f;
  13. }
  14.  
  15. int main() {
  16.     const char CSourceFile[] = "source.txt";
  17.     const char CResultFile[] = "result.txt";
  18.     FILE* fsrc  = Open(CSourceFile, "r");
  19.     FILE* fdest = Open(CResultFile, "w");
  20.     FILE* ftmp  = Open(NULL, NULL);
  21.     int value;
  22.  
  23.     while ((fscanf(fsrc, "%d", &value)) == 1) {
  24.         if (value < 0) {
  25.             fprintf(ftmp, "%d ", value);
  26.         }
  27.         else {
  28.             fprintf(fdest, "%d ", value);
  29.         }
  30.     }
  31.  
  32.     rewind(ftmp);
  33.  
  34.     while ((fscanf(ftmp, "%d", &value)) == 1) {
  35.         fprintf(fdest, "%d ", value);
  36.     }
  37.  
  38.     fclose(fsrc);
  39.     fclose(fdest);
  40.     fclose(ftmp);
  41.  
  42.     return EXIT_SUCCESS;
  43. }

Объяснение кода листинга программы

  1. Создание файла с именем source.txt и содержимым, представляющим собой последовательность целых чисел, каждое из которых отделено пробелом.
  2. Создание файла с именем result.txt и открытым доступом для записи.
  3. Создание временного файла с помощью функции tmpfile().
  4. Чтение из файла source.txt и запись в файл result.txt всех целых чисел, которые меньше нуля.
  5. Чтение из временного файла и запись в файл result.txt всех целых чисел, которые были записаны в него в предыдущем цикле.
  6. Закрытие всех открытых файлов.
  7. Завершение работы программы с кодом EXIT_SUCCESS.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы