Переписать компоненты файла 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д