Как записать массивы целых чисел в двоичные файлы? - PullRequest
0 голосов
/ 12 декабря 2018

Здравствуйте, я пытаюсь написать программу, которая хранит два отдельных целочисленных массива и один массив с плавающей запятой, мой код ниже делает это, но без части массива, другими словами, я могу записать одну цифру в файл и распечатать ее обратно, но я не могу выяснить, как сделать то же самое, но с массивом (динамически выделенный).Вот код ниже: он принимает три значения (номер детали, количество и цена) и повторяет, принимая значения, пока пользователь не введет 0 для номера детали (pn).Затем записывает эти данные в файл с именем «inventory.txt», затем в той же программе открывает файл для чтения и отображает эти значения обратно на терминал.

Пока что программа может обрабатывать только одно числов переменных за раз (да), я просто не могу понять, как сделать то же самое, но с массивом, который увеличивается с каждым добавленным элементом.

#include <stdio.h>
#include <stdlib.h>

int main(){


printf("This program stores an invetory: ");



int i=0, holdr, k;  //declarations of needed variables
int pn, q;
float p;

FILE *fp;
fp=fopen("inventory.txt","w+b");   //open file

while(holdr!=0){     //aka while pn!=0, for some reason needed a separate variable to run loop coorectly

printf("Please enter item data (part number, quantity, price): ");
scanf("%d,%d,%f",*pn,*q,*p);//scan numbers into respective variables, need to turn these into ARRAYS


            //pn = malloc((i+1) * sizeof(int));  (setting aside this part of code as I can't get it to work properly at all (for the dynamic aspect of the program(array increases in size as user enters more digits)))
            //q = malloc((i+1) * sizeof(int));
            //p = malloc((i+1) * sizeof(int));


fwrite(&pn,sizeof(int),1,fp);   //write to file
fwrite(&q,sizeof(int),1,fp);
fwrite(&p,sizeof(int),1,fp);

holdr=pn;  //set pn=holdr for the running loop 
}


rewind(fp);//back to beginning of file


fp=fopen("inventory.txt","r+b");  //open for reading


if (fp == NULL){  //check for file
printf("nah");
exit(EXIT_FAILURE);
}


fread(&pn,sizeof(int),k,fp);  //read and then print the values in the file stored in the specified variables, nned to turn these variables into ARRAYS
printf("%d\t" , **pn);
fread(&q,sizeof(int),k,fp);
printf("%d\t", **q);
fread(&p,sizeof(int),k,fp);
printf("%f\n", **p);








fclose(fp);//close file


return 0;}

Вот вторая попытка, которую ясделал, намного ближе, но он не скомпилируется, поскольку приведение malloc внутри цикла while некорректно, и я понятия не имею, как правильно распределить пространство на каждой итерации.

#include <stdio.h>
#include <stdlib.h>


int main(){


printf("This program stores an invetory: ");



int i=0, holdr, k;
int pn[1], q[1];
float p[1];

FILE *fp;
fp=fopen("inventory.txt","w+b");

while(holdr!=0){

printf("Please enter item data (part number, quantity, price): ");
scanf("%d,%d,%f",&pn[i],&q[i],&p[i]);


pn=malloc((i+1) * sizeof(int));
q=malloc((i+1) * sizeof(int));
p=malloc((i+1) * sizeof(float));


fwrite(&pn[i],sizeof(int),k+1,fp);


fwrite(&q[i],sizeof(int),k+1,fp);


fwrite(&p[i],sizeof(float),k+1,fp);


holdr=pn[i];
i++;
}


rewind(fp);


fp=fopen("inventory.txt","r+b");


if (fp == NULL){
printf("nah");
exit(EXIT_FAILURE);
}


fread(&pn,sizeof(int),k,fp);
printf("%d\t" , pn[2]);
fread(&q,sizeof(int),k,fp);
printf("%d\t", q[2]);
fread(&p,sizeof(int),k,fp);
printf("%f\n", p[2]);








fclose(fp);


return 0;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...