Записать массив в файл и прочитать обратно - 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;
}

Объяснение кода листинга программы

  1. Объявлены переменные: x, i, q=0;
  2. Выделена память под массив A и b;
  3. Запущен бесконечный цикл while(true);
  4. В первой ветке цикла происходит запись данных в файл;
  5. Во второй ветке цикла происходит считывание данных из файла;
  6. В третьей ветке цикла происходит выход из программы;
  7. Для записи данных в файл запрашивается имя файла и открывается файл в режиме записи;
  8. Записываются данные в файл;
  9. Файл закрывается;
  10. Выдается сообщение об успешном сохранении данных;
  11. Для считывания данных из файла запрашивается имя файла и открывается файл в режиме чтения;
  12. Происходит проверка на открытие файла;
  13. Если файл не открыт, выводится сообщение об ошибке и запрашивается новое имя файла;
  14. Если файл успешно открыт, происходит чтение данных из файла;
  15. Происходит проверка на корректность данных в файле;
  16. Если данные некорректны, выводится сообщение об ошибке и программа прерывается;
  17. Выводится массив A на экран;
  18. Если введен корректный вариант, программа продолжает работу;
  19. Если введен некорректный вариант, программа прерывается;
  20. Код не содержит никаких ошибок и будет работать корректно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы