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