Записать данные из одного файла в другой - 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 пробела используется для форматирования записи.