利用指针求向量乘积C语言,跪求高手帮我看一下这段用C语言实现的计算机网络的距离向量算法,调试不出来,可能是指针引用不当引发。...

/* 使用全局数组,避免指针,读写文件行数事先确定,可以运行,内容是否正确自己修改 */

# include

# include

# define MAX_NAME_LEN 80

typedef struct Router

{

char destination[MAX_NAME_LEN];

int distance;

char nexthop[MAX_NAME_LEN];

char name[MAX_NAME_LEN];

};//路由器结构定义

Router PRx[1000],PRy[1000];

int r=0,n=0;

int Dis_vector(char f1[],char f2[])

{

FILE * fp1;

FILE * fp2;

int i=0;

if ((fp1 = fopen(f1, "a")) == NULL||(fp2 = fopen(f2, "r+")) == NULL)

return 0;

while(i

(PRy[i].distance)++;strcpy(PRy[i].nexthop,PRy[i].name);i++;}//路由器Y的路由更新

i=0;

while(i

if(!strcmp(PRx[i].destination,PRy[i].destination)){

fscanf(fp1,"%s%d%s",PRy[i].destination,&(PRy[i].distance),PRy[i].nexthop);i++;return 1;}//比较目的地址

else if(!strcmp(PRx[i].nexthop,PRy[i].nexthop)){

PRx[i].distance=PRy[i].distance;i++;return 1;}//比较下一跳

else if(PRx[i].distance>PRy[i].distance){

PRx[i].distance=PRy[i].distance;strcpy(PRx[i].nexthop,PRy[i].nexthop);i++;return 1;}//比较距离

}

}//距离向量算法

int input_r(char f[])

{

FILE * fp;

int i=0;

if ((fp = fopen(f, "r")) == NULL)

return 0;

fscanf(fp,"%s",PRx[0].name);

while(!feof(fp))

{

fscanf(fp, "%4s%4d%4s", PRx[i].destination,&(PRx[i].distance),PRx[i].nexthop);

i++;

}

r=i;

if ( fclose(fp) )

return 0;

return 1;

}//读取路由器X的路由表

int input_n(char f[])

{

FILE * fp;

int i=0;

if ((fp = fopen(f, "r")) == NULL)

return 0;

fscanf(fp,"%s",PRy[0].name);

while(!feof(fp))

{

fscanf(fp, "%4s%4d%4s", PRy[i].destination,&(PRy[i].distance),PRy[i].nexthop);

i++;

}

n=i;

if ( fclose(fp) )

return 0;

return 1;

}//读取路由器Y的路由表

int output(char f[])

{

FILE * fp;

int i=0;

if ((fp = fopen(f, "w")) == NULL)

return 0;

fprintf(fp,"%s\n",PRx[0].name);

while (i

{

fprintf(fp, "%4s%4d%4s\n", PRx[i].destination,PRx[i].distance,PRx[i].nexthop);

i++;

}

if ( fclose(fp) )

return 0;

return 1;

}//输出更新后的X路由器的路由表

int main()

{

if (input_r("e:\\input_r.txt") == 1)

{

if (input_n("e:\\input_n.txt") == 1)

{

if ( Dis_vector("e:\\input_r.txt","e:\\input_n.txt")== 1)

{

output("e:\\output_PRx.txt");

printf("Dis_vector successful!\n");

}

}

}

}

取消

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值