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