我这代码出什么问题了,能查查吗?

 #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模式是只写,为输出打开一个文本文件,而不能用来向计算机输入,如果原来不存在该文件,则再打开时新建立一个指
定名字命名的一个文件。如果原来已经存在一个以该名字命名的文件,则再打开时将文件删去,然后重新建立一个新的文件。