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