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

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

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

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

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

, переписать компоненты файла F в файл G так, чтобы в файле G сначала шли положительные, потом отрицательные числа. Не получается скомпилировать:много ошибок.Помогите пожалуйста. Мои наработки:
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
 
int main()
{
    FILE *f;
        FILE *h;
    FILE *g;
        int a;
    if ((f=fopen("data1.txt", "r"))==NULL)
        printf("Файл f открыть не удалось!\n");
    exit(1);
    if ((h=fopen("data2.txt", "w"))==NULL)
        printf("Файл h открыть не удалось!\n");
    exit(2);
    }
f=fopen("data1.txt", "r");
fscanf(f, "%d ",&a);
while(!feof(f))
 {
     if(a>=0)
         fprintf(h, "%d ",a);
    fscanf(f,"%d ", &a);
 }
 f=fopen("data1.txt", "r");
 fscanf(f, "%d ", &a);
 while (!feof(f));
 {
     if(a<0)
        fpintf(h, "%d ", a);
    fscanf(f,"%d ",&a);
 }
    fclose(h);
    fclose(f);
    {
        if(g=fopen("data3.txt", "w")==NULL)
            printf("файл g открыть не удалось!\n");
        exit(3);
    }
    h=fopen("data2.txt", "r");
    fscanf(h,"%d ",&a);
    while(!feof(h))
        fprintf(g, "%d ", a);
    fscanf(h, "%d ", &a);
    fclose(h);
    fcose(g);
    return 0;
 }

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
FILE* Open(const char* name, const char* args) {
    FILE* f = (name == NULL) ? tmpfile() : fopen(name, args);
 
    if (f == NULL) {
        perror(name);
        exit(EXIT_FAILURE);
    }
 
    return f;
}
 
int main() {
    const char CSourceFile[] = "source.txt";
    const char CResultFile[] = "result.txt";
    FILE* fsrc  = Open(CSourceFile, "r");
    FILE* fdest = Open(CResultFile, "w");
    FILE* ftmp  = Open(NULL, NULL);
    int value;
 
    while ((fscanf(fsrc, "%d", &value)) == 1) {
        if (value < 0) {
            fprintf(ftmp, "%d ", value);
        }
        else {
            fprintf(fdest, "%d ", value);
        }
    }
 
    rewind(ftmp);
 
    while ((fscanf(ftmp, "%d", &value)) == 1) {
        fprintf(fdest, "%d ", value);
    }
 
    fclose(fsrc);
    fclose(fdest);
    fclose(ftmp);
 
    return EXIT_SUCCESS;
}

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

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

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


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

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

10   голосов , оценка 4.4 из 5
Похожие ответы