user-0 提问: 距离向量算法更新路由表，想请问一下大佬c语言用fread读文件，为什么会这样？怎么解决呀？

回复:
user: user-0
content: 引用 8 楼 user-1的回复:[quote=引用 7 楼 user-1 的回复:] [quote=引用 6 楼 ycp125 的回复:] [quote=引用 5 楼 user-1的回复:]我先调调代码格式。估计要个十分钟。 好的好的，非常非常非常感谢您[/quote]怎么就没点领悟能力呢。我上面那个图片白发了。。。[/quote]ennn，我改了一下，发现我也不太会。。。不好意思。尴尬。[/quote] 没事没事，还是谢谢您❤

user: user-1
content: 引用 7 楼 user-1 的回复:[quote=引用 6 楼 ycp125 的回复:] [quote=引用 5 楼 user-1的回复:]我先调调代码格式。估计要个十分钟。 好的好的，非常非常非常感谢您[/quote]怎么就没点领悟能力呢。我上面那个图片白发了。。。[/quote]ennn，我改了一下，发现我也不太会。。。不好意思。尴尬。

user: user-1
content: 引用 6 楼 ycp125 的回复:[quote=引用 5 楼 user-1的回复:]我先调调代码格式。估计要个十分钟。 好的好的，非常非常非常感谢您[/quote]怎么就没点领悟能力呢。我上面那个图片白发了。。。

user: user-0
content: 引用 5 楼 user-1的回复:我先调调代码格式。估计要个十分钟。 好的好的，非常非常非常感谢您

user: user-1
content: 我先调调代码格式。估计要个十分钟。

user: user-1

user: user-0
content: #define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #define SIZE 20 struct routing_information      //定义路由表信息的结构体 {	 char routing_name[5]; 	char net_name[100]; 	int distance;	 char next_routing[10];	 int length;}stud[SIZE], newStud[SIZE]; void save(){                                   //将路由表信息存储为文件的函数	 FILE *fp;	 int i;	 if((fp = fopen("E:\\routing.txt","wb")) == NULL)	{		printf("cannot open file\n");	 	return;	 }	 for(i=0;i<3;i++)	 	if(fwrite(&stud[i],sizeof(struct routing_information),1,fp)!=1)			 printf("file write error\n");	 fclose(fp); } void load()                         //从文件中读出路由表信息的函数 { 	FILE *fp;	 int i;	 if((fp=fopen("E:\\routing.txt","rb"))==NULL)	{		printf("cannot open the file\n");		return;	}	fread(&stud[0], sizeof(struct routing_information), 1, fp);     printf("%s  %d  %s\r\n",stud[0].net_name,stud[0].distance,stud[0].next_routing);	 for(i=1;i<stud[0].length;i++)	{		fread(&stud[i],sizeof(struct routing_information),1,fp);		 if(i==0)		 printf("路由器%s的路由表信息如下:\n",stud[0].routing_name);		 printf(" %s  %d  %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing);	} 	fclose(fp);} int charEquals(char a[],char b[])             //判断字符串是否相同的子函数 {    	int m=0; 	while(a[m]!='\0')	{		 if(a[m]==b[m])		{			 m++;		 }		 else break;	 }	 if((m==strlen(a))&&(m==strlen(b)))		 return(1);	 else		return(0); } void update(char s[]){	 int i,j,c=3;	 int flag[SIZE];	 for(i=0;i<newStud[0].length;i++)	{		strcpy(newStud[i].next_routing,s);		 flag[i]=0;	}	 for(i=0;i<stud[0].length;i++)	{		for(j=0;j<newStud[0].length;j++)		{			if(charEquals(stud[i].net_name,newStud[j].net_name)==1)		 	{				flag[j]=1;				if(charEquals(stud[i].next_routing,newStud[j].next_routing)==1)					stud[i].distance=newStud[j].distance;		 		else					if(stud[i].distance>newStud[j].distance)					{						strcpy(stud[i].next_routing,newStud[j].next_routing);						stud[i].distance=newStud[j].distance;					}			}		}	}	for(i=0;i<newStud[0].length;i++) 	{		 if(flag[i]==0)	 	{			strcpy(stud[stud[0].length].routing_name,newStud[i].routing_name);			strcpy(stud[stud[0].length].net_name,newStud[i].net_name);			stud[stud[0].length].distance = newStud[i].distance;			strcpy(stud[stud[0].length].next_routing,newStud[i].next_routing);			stud[0].length++;		}	}} void main(){ 	int i;	 char routingName[5];           //用于存储路由器名字	load();	 printf("请输入发来rip报文的路由器名字和共有几条记录\n");	 scanf("%s %d", &routingName,&newStud[0].length);	printf("请按照“目的网络   距离  下一跳路由器”的格式输入%s路由器发来的更新信息 \n",routingName); 	for(i=0;i<3;i++)	{		strcpy(newStud[i].routing_name,routingName);		scanf("%s %d %s",&newStud[i].net_name,&newStud[i].distance,&newStud[i].next_routing);	 }	 update(routingName); 	printf("路由器%s的路由表信息如下: \n",stud[0].routing_name);	for(i=0;i<stud[0].length;i++)	{		if(stud[i].distance<15)			 printf("%s %d %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing);		 else			 printf("%s %d %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing); 	} 	save();	 system("pause"); }

user: user-0
content: 引用 1 楼 user-1的回复:不介意的话，提供一下完整代码。或者能测试的代码。 大佬能帮忙看一下下吗  #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#define SIZE 20struct routing_information      //定义路由表信息的结构体{	char routing_name[5];	char net_name[100];	int distance;	char next_routing[10];	int length;}stud[SIZE], newStud[SIZE];void save(){                                   //将路由表信息存储为文件的函数	FILE *fp;	int i;	if((fp = fopen("E:\\routing.txt","wb")) == NULL)	{		printf("cannot open file\n");		return;	}	for(i=0;i<3;i++)		if(fwrite(&stud[i],sizeof(struct routing_information),1,fp)!=1)			printf("file write error\n");	fclose(fp);}void load()                         //从文件中读出路由表信息的函数{	FILE *fp;	int i;	if((fp=fopen("E:\\routing.txt","rb"))==NULL)	{		printf("cannot open the file\n");		return;	}	fread(&stud[0], sizeof(struct routing_information), 1, fp);    printf("%s  %d  %s\r\n",stud[0].net_name,stud[0].distance,stud[0].next_routing);	for(i=1;i<stud[0].length;i++)	{		fread(&stud[i],sizeof(struct routing_information),1,fp);		if(i==0)		printf("路由器%s的路由表信息如下:\n",stud[0].routing_name);		printf(" %s  %d  %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing);	}	fclose(fp);}int charEquals(char a[],char b[])             //判断字符串是否相同的子函数{	int m=0;	while(a[m]!='\0')	{		if(a[m]==b[m])		{			m++;		}		else break;	}	if((m==strlen(a))&&(m==strlen(b)))		return(1);	else		return(0);}void update(char s[]){	int i,j,c=3;	int flag[SIZE];	for(i=0;i<newStud[0].length;i++)	{		strcpy(newStud[i].next_routing,s);		flag[i]=0;	}	for(i=0;i<stud[0].length;i++)	{		for(j=0;j<newStud[0].length;j++)		{			if(charEquals(stud[i].net_name,newStud[j].net_name)==1)			{				flag[j]=1;				if(charEquals(stud[i].next_routing,newStud[j].next_routing)==1)					stud[i].distance=newStud[j].distance;				else					if(stud[i].distance>newStud[j].distance)					{						strcpy(stud[i].next_routing,newStud[j].next_routing);						stud[i].distance=newStud[j].distance;					}			}		}	}	for(i=0;i<newStud[0].length;i++)	{		if(flag[i]==0)		{			strcpy(stud[stud[0].length].routing_name,newStud[i].routing_name);			strcpy(stud[stud[0].length].net_name,newStud[i].net_name);			stud[stud[0].length].distance = newStud[i].distance;			strcpy(stud[stud[0].length].next_routing,newStud[i].next_routing);			stud[0].length++;		}	}}void main(){	int i;	char routingName[5];           //用于存储路由器名字	load();	printf("请输入发来rip报文的路由器名字和共有几条记录\n");	scanf("%s %d", &routingName,&newStud[0].length);	printf("请按照“目的网络   距离  下一跳路由器”的格式输入%s路由器发来的更新信息 \n",routingName);	for(i=0;i<3;i++)	{		strcpy(newStud[i].routing_name,routingName);		scanf("%s %d %s",&newStud[i].net_name,&newStud[i].distance,&newStud[i].next_routing);	}	update(routingName);	printf("路由器%s的路由表信息如下: \n",stud[0].routing_name);	for(i=0;i<stud[0].length;i++)	{		if(stud[i].distance<15)			printf("%s %d %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing);		else			printf("%s %d %s\n",stud[i].net_name,stud[i].distance,stud[i].next_routing);	}	save();	system("pause");}

user: user-1
content: 不介意的话，提供一下完整代码。或者能测试的代码。