Reputation: 15
int main()
{
FILE* infile1;
int stockCode[15];
char stockName[100];
int stockQuantity[15];
int stockReorder[15];
int unitPrice[15];
int i;
infile1 = fopen("NUSTOCK.TXT", "r");
while(fscanf(infile1, "%d %s %d %d %f",
&stockCode, stockName, &stockQuantity, &stockReorder, &unitPrice) != EOF)
{
printf(" %3d %-18s %3d %3d %6.2f \n",
stockCode, stockName, stockQuantity, stockReorder, unitPrice);
}
fclose(infile1);
}
What I'm trying to do is to take information from a file and store it into 5 separate arrays. However, when printing out, it only prints out the name correctly.
1394854864 Prune-Basket 1394854688 1394854624 0.00
1394854864 Pear-Basket 1394854688 1394854624 0.00
1394854864 Peach-Basket 1394854688 1394854624 0.00
1394854864 Deluxe-Tower 1394854688 1394854624 0.00
The original file looks like this. So all the numbers aren't being scanned in and I can't figure out why...
101 Prune-Basket 065 060 25.00
105 Pear-Basket 048 060 30.00
107 Peach-Basket 071 060 32.00
202 Deluxe-Tower 054 040 45.00
Upvotes: 0
Views: 122
Reputation: 967
I think what you want to do is designing a structure for saving many personal records. And each record contain:
You should know the meaning of each type in C language.
I suggest you rewrite your codes like these:
#include <stdio.h>
#include <stdlib.h>
struct OneRecord{
int code;
char name[100];
int quantity;
int recorder;
float unitPrice;
};
int main(){
struct OneRecord* records = (struct OneRecord*)calloc(15, sizeof(struct OneRecord));
int i = 0;
FILE* infile1 = fopen("NUSTOCK.TXT", "r");
int max=0;
//%99s is used for max string length, because of we can protect the out of string's memory length
while((max<15)&&(fscanf(infile1, "%d %99s %d %d %f",
&records[i].code, records[i].name, &records[i].quantity, &records[i].recorder, &records[i].unitPrice) == 5))
{
i++;
max++;
}
for(i=0;i<max;i++){
printf(" %3d %-18s %3d %3d %6.2f \n",
records[i].code,records[i].name,records[i].quantity,records[i].recorder,records[i].unitPrice);
}
fclose(infile1);
free(records);
}
And how to use the C Structure
in functions or many other places?
In C programming language, there are different types such as int, char, struct and so on. You can use struct
like many other types.
void printRecords(const struct OneRecord* records, int max)
{
int i;
for(i=0;i<max;i++){
printf(" %3d %-18s %3d %3d %6.2f \n",
records[i].code,records[i].name,records[i].quantity,records[i].recorder,records[i].unitPrice);
}
}
Upvotes: 2
Reputation: 15121
You are using those arrays incorrectly. Try this:
i = 0;
while(fscanf(infile1, "%d %s %d %d %f",
stockCode+i, stockName, stockQuantity+i, stockReorder+i, unitPrice+i) != EOF)
{
printf(" %3d %-18s %3d %3d %6.2f \n",
stockCode[i], stockName, stockQuantity[i], stockReorder[i], unitPrice[i]);
i++;
}
Also, the unitPrice
should be a array of float
, not of int
.
Upvotes: 1