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