关于随机文件的访问小程序问题
#include <stdio.h>#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
#include <conio.h>
#define LEN 100
typedef struct//定义书籍结构
{
char bookid[6];//书号
char bookname[30];//书名
int price;//单价
int qty;//库存
char flag[3];//删除标记
}book;
int main(void)
{
FILE *fptr;
char fpath[LEN],t_price[10],t_qty[10];
//char pid[5],pname[30],str_price[5];
int fno,fsize,rectot;
book mybook;
printf("\n请选择功能->1.打开新文件 2.打开旧文件:");
if(getche()=='1')
{
printf("\n 请输入新文件路径:");
gets(fpath);
fptr=fopen(fpath,"w+");//以建立新文件的模式打开文件
}
else
{
printf("\n请输入要打开的文件路径:");
gets(fpath);
fptr=fopen(fpath,"a+");//追加数据模式打开文件
}
if(fptr==NULL)
{
printf("\n打开文件失败,%s 可能不存在\n",fpath);
exit(0);
}
//fno=fileno(fptr);
// fsize=filelength(fno);
//printf("\n %s打开文件成功,原文件大小为 %d Bytes \n",fpath,fsize);
while(1)
{
printf("\n 请问是否要继续添加增数据(Y/N):");
if(toupper(getche())=='Y')
{
printf("\n 请输入添加的数据->\n");
printf("书号:");
gets(mybook.bookid);
printf("书名:");
gets(mybook.bookname);
printf("单价: ");
gets(t_price);
mybook.price=atoi(t_price);//将t_price字符串转成整数并赋值给price
printf("库存: ");
gets(t_qty);
mybook.qty=atoi(t_qty);
fwrite(&mybook,sizeof(mybook),1,fptr);//将结构写入文件
}
else
{
fclose(fptr);
break;
}
}
fptr=fopen(fpath,"r");
fno=fileno(fptr);
fsize=filelength(fno);
rectot=filelength(fileno(fptr))/sizeof(book);//取得记录总长度
printf(" \n数据更新完成...");
printf("\n %s目前文件大小为 %d Bytes \n",fpath,fsize);
printf("\n %s数据文件内容如下 \n",fpath);
printf("\n 记录总笔数: %d \n",rectot);
//判断是否还有数据
while(fread(&mybook,sizeof(mybook),1,fptr)!=NULL)//取出一笔记录,文件指针再向后移动一笔记录的长度
{
printf("%6s %30s %5d %5d\n",mybook.bookid,mybook.bookname,mybook.price,mybook.qty);
}
fclose(fptr);//关闭文件
printf("\n");
return 0;
}
//输入两笔记录后,结果的.txt文件中内容为乱码!
s.rar
(440 Bytes)