Переписать компоненты файла 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;
}