#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <conio.h>
typedef int BOOL;
typedef struct bookinfo
{
char number[15];/*产品编号*/
char name[30];/*产品名称*/
float price;/*单价*/
char auther[20];/*作者*/
BOOL isExit;/*存在状态*/
char lendername[20];/*借书人姓名*/
char lendersex[2];/*借书人性别*/
char lendernum[15];/*借书人学号*/
}BOOKINFO;
void choice_1_input_new()/*输入新进的图书信息*/
{
char choice;
FILE *p;
BOOKINFO newbook;
system("cls");
while(1)
{
printf("输入图书编号:");
gets(newbook.number);
printf("输入图书名称:");
gets(newbook.name);
printf("输入图书单价(小数点后一位):");
scanf("%f",&newbook.price);
while(getchar()!='\n');
printf("输入图书的作者:");
gets(newbook.auther);
printf("输入借书人姓名:");
gets(newbook.lendername);
printf("输入借书人性别:");
gets(newbook.lendersex);
printf("输入借书人学号:");
gets(newbook.lendernum);
printf("是否保存该条书目?(Y/N)\n");
choice=getchar();
while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
choice=getchar();
if(choice=='Y'||choice=='y')
{
if(newbook.lendername=="\r"||newbook.lendersex=="\r"||newbook.lendernum=="\r")
newbook.isExit=1;//将图书状态设置成1,表示没有借出
else
newbook.isExit=0;//将图书状态设置成0,表示借出
p=fopen("c:\\bookinfo.txt","w");
fwrite(&newbook,sizeof(BOOKINFO),1,p);
fclose(p);
printf("\n该条书目已添加到c:\\bookinfo.txt文件中!\n");
}
else
printf("\n本条书目未保存!\n");
}
}
void main()
{
choice_1_input_new();
}
你那中情况估计是你编译器的问题,但是你这个程序中有一点小错误,就是你输入一本图书的信息之后输入第二本就会出现一点小错误。
你在那个保存信息的那个子函数里加一个getchar函数吸收掉那个回车换行的符号
至于我加那个int main 跟return 0;是因为编译器不能通过void main 我用的是dev c++这个编译器
我的检测没有发现错误,不过建议你不要使用gets函数
以上图片为我在我的电脑上运行的截图,我用的是VS2012,当然你的代码跟编译器对标准的支持无关,所以你用VC6.0完全可以实现,其次有一个问题,就是你的代码(循环框架)有问题,这不是重点,看到你的截图说是崩溃,是因为你给指定了路径,却没有去在指定路径创建相应的文件,找不到
文件而崩溃。
补充一句,我好像记得W模式是只写,并且是(默认)以二进制形式写入文件的,并且不会自动创建文件,也就是说你必须得先创建好文件再打开
并往进写数据。 如果想要按你说的那你就必须换个模式了。。。你这属于基本功不扎实...
抱歉修正一下我的说法**_补充一句,我好像记得W模式是只写,并且是(默认)以二进制形式写入文件的,并且不会自动创建文件,也就是说你必须得先创建好文件再打开_** W模式是只写,为输出打开一个文本文件,而不能用来向计算机输入,如果原来不存在该文件,则再打开时新建立一个指
定名字命名的一个文件。如果原来已经存在一个以该名字命名的文件,则再打开时将文件删去,然后重新建立一个新的文件。