Записать данные из одного файла в другой - C (СИ)
Формулировка задачи:
Здравствуйте. Помогите пожалуйста! Сформировать файл из некоторых чисел. Записать во второй файл все положительные элементы первого, а затем абсолютные величины отрицательных элементов.
у меня есть программа, где записывают во второй файл количество положительных, отрицательных и нулевых элементов. Помогите переделать.
Листинг программы
- #include<stdio.h>
- #include<conio.h>
- #define N 6
- void main(void)
- {
- FILE *f1; // Указатель на первый файл
- FILE *f2; // Указатель на второй файл
- int mas[N]; // Массив, элементами которого заполняется первый файл
- int i, buf, nul, otr, pol; // i - переменная счетчика цикла
- // buf - переменная, в которую будут
- // считыватся значения из первого файла
- // pol, otr, nul - переменные количества
- // положительных, отрицательных и нулевых
- // элементов первого файла соответственно
- clrscr(); // Очистка экрана
- // Заполнение массива
- for(i=0; i<N; i++)
- {
- printf("Введите %i элемент массива: ", i);
- scanf("%i", &mas[i]); // Ввод элементов массива
- }
- // Создание в текущем каталоге файлов с именами file1 и file2
- // и открытие их на запись
- f1=fopen("file1","w+");
- f2=fopen("file2","w+");
- // Запись в файл с именем file1 элементов массива mas[N]
- for(i=0; i<N; i++) fwrite(&mas[i],1,sizeof(int),f1);
- fclose(f1); // Закрытие файла file1
- pol=0; // Присвоение начального значения переменным
- otr=0; // количества положительных, отрицательных и
- nul=0; // нулевых элементов
- fopen("file1","r+");
- while(fread(&buf,sizeof(int),1,f1)!=0)
- {
- if(buf>0) pol=pol+1;
- if(buf<0) otr=otr+1;
- if(buf==0) nul=nul+1;
- }
- fprintf(f2,"В ПЕРВОМ ФАЙЛЕ СОДЕРЖИТСЯ:\n");
- fprintf(f2,"\nположительных элементов: %i", pol);
- fprintf(f2,"\nотрицательных элементов: %i", otr);
- fprintf(f2,"\nнулевых элементов: %i", nul);
- printf("РАБОТА С ФАЙЛАМИ ЗАВЕРШЕНА");
- printf("\nНажмите любую клавишу");
- getch();
- }
Решение задачи: «Записать данные из одного файла в другой»
textual
Листинг программы
- int n;
- while (fscanf(ifp, "%d", &n) == 1)
- if (n > 0)
- fprintf(ofp, " %d", n);
- rewind(ifp);
- while (fscanf(ifp, "%d", &n) == 1)
- if (n < 0)
- fprintf(ofp, " %d", -n);
Объяснение кода листинга программы
- Объявлена переменная типа int
n
. - В цикле while считываются числа из файла
ifp
в переменнуюn
с помощью функцииfscanf
. Условие цикла - результат сравненияfscanf
с 1. - Внутри цикла проверяется условие
n > 0
. Если оно истинно, то числоn
записывается в файлofp
с помощью функцииfprintf
. Отступ в 4 пробела используется для форматирования записи. - После завершения первого цикла, файл
ifp
сбрасывается в начало с помощью функцииrewind
. - Во втором цикле while считываются числа из файла
ifp
в переменнуюn
с помощью функцииfscanf
. Условие цикла - результат сравненияfscanf
с 1. - Внутри цикла проверяется условие
n < 0
. Если оно истинно, то числоn
записывается в файлofp
с помощью функцииfprintf
. Отступ в 4 пробела используется для форматирования записи.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д