Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в заданном порядке - C (СИ) (74538)

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

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

Дан файл F, содержащий целые числа. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных(предполагается, что число компонент в файле делится на 4). Сомневаюсь в правильности своей программы.Помогите пожалуйста.Выкладываю свои наработки.
#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 C1File[] = "1.txt";
    const char C2File[] = "2.txt";
    const char CMiddleFile[] = "middle.txt"; 
    FILE* f  = Open(C1File, "r");
    FILE* g = Open(C2File, "w");
    FILE* h  = Open(CMiddleFile, "w");
    int i=0,e=2,k;
    while(!feof(f))
    {
    fscanf_s(f, "%d ", &k);
    {
    if((k>0) && (i<2) && (e=2))
        fprintf(g,"%d ", k);
        i++;
    else if(k<0)
    fprintf(h, "%d ", k);
        exit(1);
   }
}
    while(!feof(h))
    {
        fscanf(h,"%d", &k);
       {
        if((k<0) && (i<2) && (e=2))
            fprintf(g, "%d", k);
        i++;
        exit(2);
       }
    }
    exit(3);
    fclose(g);
    fclose(f);
    fclose(h);
return 0;
}

Решение задачи: «Переписать компоненты файла f в файл g так, чтобы в файле 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* ftmp1 = Open(NULL, NULL);
    FILE* ftmp2 = Open(NULL, NULL);
    FILE* ftmp;
 
    int value, cnt;
 
    while ((fscanf(fsrc, "%d", &value)) == 1) {
        ftmp = (value < 0) ? ftmp2 : ftmp1;
        fprintf(ftmp, "%d ", value);
    }
 
    rewind(ftmp1);
    rewind(ftmp2);
    ftmp = ftmp2;
 
    while (!feof(ftmp1) || !feof(ftmp2)) {
        ftmp = (ftmp == ftmp1) ? ftmp2 : ftmp1;
        cnt = 2;
        while (cnt-- && (fscanf(ftmp, "%d", &value) == 1)) {
            fprintf(fdest, "%d ", value);
        }
    }
 
    fclose(ftmp2);
    fclose(ftmp1);
    fclose(fdest);
    fclose(fsrc);
 
    return EXIT_SUCCESS;
}

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


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

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

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