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);
}
我要做的是从一个文件中获取信息并将其存储到5个单独的数组中。但是,当输出时,它只正确地输出名称。
1394854864梅篮1394854688 1394854624 0.00
1394854864梨篮1394854688 1394854624 0.00
1394854864桃篮1394854688 1394854624 0.00
1394854864豪华大厦1394854688 1394854624 0.00
原始文件如下所示。所以所有的号码都没有被扫描进去,我不明白为什么。。。
101李篮065060 25.00
105梨篮048060 30.00
107桃篮071 060 32.00
202豪华大厦054 040 45.00
最佳答案
我想你想做的是设计一个保存许多个人记录的结构。
每条记录包含:
代码
名称
量
重新排序
单价
你应该知道C语言中每种类型的意思。
我建议你重写代码如下:
#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);
}
如何在函数或其他许多地方使用C
Structure
?在C语言中,有int、char、struct等不同的类型。您可以像许多其他类型一样使用
struct
。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);
}
}