Записать массив в файл и прочитать обратно - C (СИ)
Формулировка задачи:
Задать массив целых чисел размерностью 12, записать его в файл на диске, прочитать его из файла в другой массив, новый массив вывести на экран.
P.S.есть пример похожей задачи, но не получается её написать (т.к. я нуб)
Если возможно, то сделайте её так, как в примере :
#include <stdlib.h>
#include<conio.h>
#include <stdio.h>
FILE *fp1;
char str[]="feellikeninja", str1[40];
void main( )
{
clrscr();
fp1 = fopen("C:\\work \\list.txt","w" );
if ( fp1!= NULL )
printf("\nSuccessful opening C:\\work \\list.txt in mode w.\n");
else { printf("pomilka\n") ; exit(0); }
fputs(str, fp1) ;
fclose(fp1);
fp1 = fopen("C:\\work \\list.txt","r" );
if ( fp1!= NULL )
printf("\nSuccessful opening C:\\work\\list.txt in mode r.\n");
else { printf("pomilka\n") ; exit(1) ;}
fgets(str1, 11, fp1) ;
printf("\nstr= %s\n", str1);
fclose(fp1);
}Решение задачи: «Записать массив в файл и прочитать обратно»
textual
Листинг программы
#include <stdlib.h>
#include<conio.h>
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"Rus");//русский язык
int x,i,q=0;
int* A=(int*)malloc(12*sizeof(int));
int* b=(int*)malloc(12*sizeof(int));
while(true)
{
system("cls");
printf("\tМеню\n\n1)Считать данные с файла\n2)Записать данные в файл\n3)Выход\n\n");
while(!fflush(stdin)&&printf("Ваш вариант: ")&&!scanf("%i",&x));
if(x==2)
{
if( q == 0 )
{
printf("\nОшибка.Данных для записи нет\n");
getch();
continue;
}
//--------------------Запись в файла---------------//
printf("Файл для сохранения данных: ");
char *nameOut=(char *)malloc(256);
scanf("%s",nameOut);
FILE *fp2=fopen(nameOut,"w");//открываем файл2
for (i = 0; i < 12; i++)
{
fprintf(fp2,"%i ",A[i]); //запись в файл
}
fclose(fp2);//закрываем файл 2
fflush(fp2);
printf("Данные успешно сохранены");
getch();
//---------------------------------- ---------------//
}
if(x==1)
{
//--------------------Считывание из файла---------------//
printf("\nФайл для считывания данных: ");//спрашиваем имя файла
char *nameIn=(char *)malloc(256);//память под имя файла
scanf("%s",nameIn);//это имя файла
FILE *fp1=fopen(nameIn,"r");//открываем файл для чтения
while( (fp1=fopen(nameIn,"r")) == 0 )
{
printf("\nОшибка.Файл не найден!\n");
printf("\nФайл для считывания данных: ");
scanf("%s",nameIn);
}
for (i=0;i<12;i++)
{
fscanf (fp1,"%i",&A[i]);
if( A[i] > 1000 || A[i] < -1000 )
{
printf("Ошибка.Файл задан неверно!");
getch();
break;
}
}
system("cls");
printf("Массив A: ");//вывод матрицы на экран
for (i = 0; i < 12; i++)
{
if( A[i] > 1000 || A[i] < -1000 )
{
break;
}
printf("%i ",A[i]);
}
q++;
fflush(fp1);
fclose(fp1);
getch();
}
if(x==3)
{
break;
}
if(x<=0 || x >3)
{
continue;
}
}
//------------------------------------------------------//
return 0;
}
Объяснение кода листинга программы
- Объявлены переменные: x, i, q=0;
- Выделена память под массив A и b;
- Запущен бесконечный цикл while(true);
- В первой ветке цикла происходит запись данных в файл;
- Во второй ветке цикла происходит считывание данных из файла;
- В третьей ветке цикла происходит выход из программы;
- Для записи данных в файл запрашивается имя файла и открывается файл в режиме записи;
- Записываются данные в файл;
- Файл закрывается;
- Выдается сообщение об успешном сохранении данных;
- Для считывания данных из файла запрашивается имя файла и открывается файл в режиме чтения;
- Происходит проверка на открытие файла;
- Если файл не открыт, выводится сообщение об ошибке и запрашивается новое имя файла;
- Если файл успешно открыт, происходит чтение данных из файла;
- Происходит проверка на корректность данных в файле;
- Если данные некорректны, выводится сообщение об ошибке и программа прерывается;
- Выводится массив A на экран;
- Если введен корректный вариант, программа продолжает работу;
- Если введен некорректный вариант, программа прерывается;
- Код не содержит никаких ошибок и будет работать корректно.