user-0 提问: 为什么老是这一块老是出现unhandled exception的错误啊

回复:
user: user-0
content: 引用 5 楼 自信男孩 的回复:[quote=引用 4 楼 Garllic 的回复:] [quote=引用 3 楼 自信男孩 的回复：]建议贴出一下写文件的操作，但从目前的代码看不出问题所在我把文件打开从“r+”改成“r”就可以了 这是怎么一回事啊  我写入的时候是“a”的方式打开的[/quote] 还得看代码，从你的描述来看不应该把r+改成r就可以。[/quote] 会不会是因为我写文件的时候的方式是“a”所以不能用“r+”的方式来读文件呢？ 代码的话我现在是全改成a+和r+运行起来是可以的了，但如果把“a+”改成“a”似乎就不行了，麻烦大佬看看这是为啥呢 关于文件函数的代码在200,236,283行！！ 真是麻烦啦！！感激不尽！   #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h>  typedef struct Book { 	char name[54]; 	char author[54]; 	char price[12]; 	int num; } Book;  typedef struct LNode {     int num; 	Book book;     struct LNode * next;  } LNode,*Linklist;   void boss(); void menu(); void book_creat(); void book_look (); void book_change (); Book book_find_name (char name[],FILE *pf);  int main (){ 	boss(); 	menu();  	return 0; }  void boss() {	 	char mima[120]; 	int t_f; 	 	printf("**********管理员身份认证**********\n\n");  	printf("为系统安全请输入管理员密钥！\n"); 	printf("密钥："); 	scanf("%s",mima); 	 	t_f=strcmp(mima , "123");  	if(t_f!=0){ 		system ("cls"); 		printf("\n\n"); 		printf("------------------------!!!!-------------------------\n"); 		printf("密码错误，按任意键返回认证页面（注意字母区分大小写）！\n"); 		printf("-----------------------------------------------------\n"); 		getch (); 		system("cls"); 		boss(); 	} 	else  	{ 		system("cls"); 		menu(); 	} }    void menu() { 	char x;  	printf("**************图书管理系统**************\n\n");  	printf("            1.创建图书信息\n"); 	printf("            2.查看图书信息\n"); 	printf("            3.删除图书信息\n"); 	printf("            4.修改图书信息\n"); 	printf("            0.退出程序\n\n");  	printf("请选择（1-4）\n"); 	printf("****************************************\n");  	do 	{ 		x=getch(); 	}while (x<48||x>52);  	system("cls");  	switch(x) 	{ 	case '1': book_creat (); 	case '2': book_look (); 	case '3':; 	case '4': book_change(); 	case '0': return ; 	default:menu(); 	} 	 }  void book_creat() { 	char x; 	char s; 	int i=0; 	FILE *fp;  	Book book; 	Book *pbook=NULL;  	printf("**************图书管理系统---书籍录入**************\n\n");  	printf("书名："); 	scanf("%s",book.name); 	printf("作者："); 	scanf("%s",book.author); 	printf("价格："); 	scanf("%s",book.price); 	printf("数目:"); 	scanf("%d",&book.num);  	system("cls");  	do 	{ 	printf("**************图书管理系统---书籍录入**************\n"); 	printf("请确认图书信息:\n"); 	printf("书名：%s\n",book.name); 	printf("作者：%s\n",book.author); 	printf("价格：%s\n",book.price); 	printf("数目：%d\n\n",book.num);  	printf("输入“1”修改信息\n"); 	printf("输入“0”重新输入信息\n"); 	printf("其他任意键确认输入\n"); 	printf("***************************************************\n");  	x=getch (); 	system("cls");  	switch(x) 	{ 	case '0':book_creat(); 	case '1': 		printf("**************图书管理系统---书籍录入.信息更改**************\n"); 		printf("请选择更改信息:\n"); 		printf("1.书名：%s\n",book.name); 		printf("2.作者：%s\n",book.author); 		printf("3.价格：%s\n",book.price); 		printf("4.数目: %d\n",book.num); 		printf("输入任意键返回\n\n");  		printf("选择（1-3）\n"); 		printf("************************************************************\n"); 		 		s=getch(); 		system("cls");  		switch(s) 		{ 		case '1': 			printf("**************书名更改**************\n\n");  			printf("请输入书名："); 			scanf("%s",book.name); 			i=1; 			break; 		case '2': 			printf("**************作者更改**************\n\n");  			printf("请输入作者："); 			scanf("%s",book.author); 			i=1; 			break; 		case '3': 			printf("**************价格更改**************\n\n");  			printf("请输入价格："); 			scanf("%s",book.price); 			i=1; 			break; 		case '4': 			printf("**************数目更改**************\n\n");  			printf("请输入数目："); 			scanf("%d",&book.num); 			i=1; 			break; 		default: 			i=1; 			break; 		} 	default: 		i=0; 	} 	system("cls"); 	}while (i==1);  	pbook=&book;  	fp=fopen("图书管理.txt","a+"); 	fwrite(pbook,sizeof(Book),1,fp); 	fclose (fp); 	 	printf("**************图书管理系统**************\n\n");  	printf("操作成功！\n"); 	printf("继续输入请按“1”\n"); 	printf("返回菜单请按任意键\n\n");  	printf("****************************************\n");  	x=getch();  	switch(x) 	{ 	case '1': 		system("cls"); 		book_creat(); 	default: 		system("cls"); 		menu(); 	}  }  void book_look () { 	FILE *pf; 	Book book; 	Book *pbook=&book; 	int i=1; 	char x; 	int num=0; 	int ii;  	pf=fopen("图书管理.txt","r+"); 	 	fseek(pf,0,2); 	ii=ftell(pf); 	rewind(pf); 	 	while (ii!=ftell(pf)) 	{ 		fread(pbook,sizeof(Book),1,pf);  		printf("编号%04d\n",i++); 		printf("书名：%s\n",pbook->name); 		printf("作者：%s\n",pbook->author); 		printf("价格：%s\n",pbook->price); 		printf("数目：%d\n",pbook->num); 		 		num+=pbook->num; 	}  	 	fclose (pf);  	printf("--------------------------------------------\n"); 	printf("书录以打印完成！总共收录书籍%d本\n",num); 	printf("请选择：1.修改图书信息！2.删除图书信息\n"); 	printf("按任意键回到菜单\n");  	x=getch();  	switch (x) 	{ 	case '1':system ("cls");book_change(); 	case '2':system ("cls"); 	default:system ("cls");menu(); 	}  }  void book_change () { 	Book change ; 	char x; 	char find[120]; 	int i=0 ; 	FILE *pf; 	int chch=0;  	pf=fopen("图书管理.txt","r+");  		printf("**************图书管理系统---图书信息更改**************\n\n");  		printf("选择以下方式查询需要更改的书籍\n"); 		printf("1.书名索引\n"); 		printf("2.作者索引\n\n");  		printf("其它任意键返回主菜单\n"); 		printf("*******************************************************\n");  			x=getch();  		system("cls");  		switch(x) 		{ 		case '1': 			printf("**************图书管理系统---图书索引.书名**************\n\n");  			printf("请输入书名："); 			scanf( "%s", find );  			change=book_find_name(find,pf);  			break; 		case '2': 			printf("**************图书管理系统---图书索引.书名**************\n\n");  			printf("请输入作者名："); 			scanf("%s",find);  			change=book_find_author(find,pf);  			break; 		default: 			menu(); 		}  		do 		{ 		system("cls");  		printf("**************图书管理系统---图书信息更改**************\n\n");  		printf("请确认需要更改书籍信息：\n"); 		printf("1.书名：%s\n",change.name); 		printf("2.作者：%s\n",change.author); 		printf("3.价格：%s\n",change.price); 		printf("4.数目：%d\n",change.num); 		printf("0.确认更改\n\n");  		printf("请选择需要更改的信息（1-4）\n"); 		printf("按其它任意键取消此书籍更改\n"); 		printf("*******************************************************\n");  		x=getch();  		system("cls");  		switch(x) 		{ 		case '1': 			printf("**************书名更改**************\n\n");  			printf("请输入书名："); 			scanf("%s",change.name); 			break; 		case '2': 			printf("**************作者更改**************\n\n");  			printf("请输入作者："); 			scanf("%s",change.author); 			break; 		case '3': 			printf("**************价格更改**************\n\n");  			printf("请输入价格："); 			scanf("%s",change.price); 			break; 		case '4': 			printf("**************数目更改**************\n\n");  			printf("请输入数目："); 			scanf("%d",&change.num); 			break; 		case '0': 			chch=1; 			break; 		default: 			book_change(); 		} 		}while (chch==0);  		system("cls");  		fseek(pf,-sizeof(Book),1); 		fwrite(&change,sizeof(Book),1,pf);  		fclose (pf);  		printf("**************图书管理系统**************\n\n");  		printf("操作成功！\n"); 		printf("继续修改书籍请按“1”\n"); 		printf("返回菜单请按其它任意键\n\n");  		printf("****************************************\n");  		x=getch();  		switch(x) 		{ 		case '1': 			system("cls"); 			book_change(); 		default: 			system("cls"); 			menu(); 		}  }  Book book_find_name (char name[],FILE *pf) { 	Book booki; 	int ch;  	while (!feof(pf)&&ch!=0) 	{ 		fread(&booki,sizeof(Book),1,pf); 		ch=strcmp(name,booki.name); 	}  	return booki; }  Book book_find_author (char name[],FILE *pf) { 	 	 	return booki; }

user: user-1
content: 引用 4 楼 Garllic 的回复:[quote=引用 3 楼 自信男孩 的回复：]建议贴出一下写文件的操作，但从目前的代码看不出问题所在我把文件打开从“r+”改成“r”就可以了 这是怎么一回事啊  我写入的时候是“a”的方式打开的[/quote] 还得看代码，从你的描述来看不应该把r+改成r就可以。

user: user-0
content: 引用 3 楼 自信男孩 的回复：建议贴出一下写文件的操作，但从目前的代码看不出问题所在我把文件打开从“r+”改成“r”就可以了 这是怎么一回事啊  我写入的时候是“a”的方式打开的

user: user-1
content: 建议贴出一下写文件的操作，但从目前的代码看不出问题所在

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: 这是两个自己定的类型