Используя вспомогательный файл 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;
}
Объяснение кода листинга программы
- Создание файла с именем
source.txtи содержимым, представляющим собой последовательность целых чисел, каждое из которых отделено пробелом. - Создание файла с именем
result.txtи открытым доступом для записи. - Создание временного файла с помощью функции tmpfile().
- Чтение из файла
source.txtи запись в файлresult.txtвсех целых чисел, которые меньше нуля. - Чтение из временного файла и запись в файл
result.txtвсех целых чисел, которые были записаны в него в предыдущем цикле. - Закрытие всех открытых файлов.
- Завершение работы программы с кодом EXIT_SUCCESS.