文件读取
有一存储很多商品数据(每件商品的属性先后包括:品名、规格、数量、单价,编程时相应的数据类型分别定义为字符串char(20)、字符串char(12)、long、float)的二进制文件sp.dat(即未作任何格式转换而直接使用fwrite将商品属性写入文件),从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔),若无则显示没有相应品名的商品。
我编写的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct goods
{
char pinming[21];
char guige[13];
long int shuliang;
float danjia;
};
int main(void)
{
int n;
char sppm[21];
FILE *fp;
struct goods SP;
printf("Please input shang pin pin ming:");
scanf("%s",sppm);
fp = fopen("sp.dat", "rb");
if (fp == NULL)
{
printf("cann't open file");
return 0;
}
n = 0;
printf("\ncha zhao qing kuang:");
while (!feof(fp))
{
fread(&SP,sizeof(struct goods),1,fp);
if (strcmp(sppm, SP.pinming) == 0)
{
n++;
printf("\n%s,%s,%ld,%.2f", SP.pinming, SP.guige, SP.shuliang, SP.danjia);
}
}
if (n == 0)
{
printf("\nmei you shang pin :%s\n", sppm);
}
return 0;
}
sp.dat文件为以下内容的二进制:
xuebi da 345 6.00
nongfuSQxianchengduo zhongxingA 57398 4.392
xuebi xiao 4567 2.004
xuebi da 456 6.003
但运行时输入:xuebi,结果却为:xuebi,a,1086324736,174404407...
请高手指教
[解决办法]
sp.dat的格式不对吧
你是否有一个逆功能,就是按照相同的结构把数据录入到sp.dat中?
[解决办法]
推荐使用WinHex软件查看文件或内存中的原始字节内容。