首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf scanf有异常,异常很奇怪,内存异常

2012-11-04 
printf scanf有错误,错误很奇怪,内存错误C/C++ code#include stdio.h#define MAX 500#define maxvernum

printf scanf有错误,错误很奇怪,内存错误

C/C++ code
#include <stdio.h>#define MAX 500#define maxvernum 50typedef struct{    int t_number;    char t_name[20];}bustop;typedef struct{  int  l_number;  int  l_quantity;  int  l_busstop[10];  char l_name[20];}busline;typedef struct{       int vexs[maxvernum];    bustop  top[maxvernum];    busline line[maxvernum];    int adjmatrix[maxvernum][maxvernum];    int n,m,b;        //图中的站点数(顶点数)n与线路数m、图中的边数b;}mgraph;/*创建公交线路图*/void Create_Mgragh(mgraph &g){   int i,j;  printf("请输入公交站点数和公交线路数和边数:\n");  scanf("%d%d%d",&g.n,&g.m,&g.b);  printf("请输入站点的编号与名称:\n");  for(i=1;i<=g.n;i++)  scanf("%d%c",&g.top[i].t_number,&g.top[i].t_name);  for(i=1;i<=g.m;i++)      {        printf("请输入公交线路的编号与该线路包含的站点数:\n");       scanf("%d%d",  &g.line[i].l_number,&g.line[i].l_quantity);       printf("该线路经过的站点是:");       for(j=1;j<=g.line[i].l_quantity;j++)          scanf("%d",&g.line[i].l_busstop[j]);      }     //邻接矩阵初始化为0                                        for(i=1;i<=g.n;i++)     for(j=1;j<=g.n;j++)         g.adjmatrix[i][j]=0;                     printf("该图所有边的顶点:\n");    for(i=1;i<=g.b;i++)    {           int h,s;        scanf("%d%d",&h,&s);        g.adjmatrix[h][s]=1;         g.adjmatrix[s][h]=1;    }   printf("*************************************************\n");   printf("输出图的邻接矩阵如下:                          *\n");   for(i=1;i<=g.n;i++)   {       {for(j=1;j<=g.n;j++)       printf("%d\t",g.adjmatrix[i][j]);       printf("*");       printf("\n");       }   }   printf("*************************************************\n");}int menu(){   printf("*********************公交系统******************\n");  printf("*操作代码如下:                               *\n");  printf("*            1、建立公交线路图。              *\n");  printf("*            2、查询最佳乘车路线。            *\n");  printf("*            3、退出程序。                    *\n");  printf("***********************************************\n");  return 1;}void SearchDijkstra(mgraph g,int w,int v){      int pre[6],dist[6],a[6];    int i,j,p,min,k, top=0;    for(i=1;i<=g.n;i++)                        //初始化数组dist和pre.    {      dist[i]=g.adjmatrix[w][i];      if(dist[i]==0)         pre[i]=0;      else         pre[i]=w;    }   pre[w]=0;   dist[w]=0;   g.adjmatrix[w][w]=1;   for(p=1;p<=g.n;p++)   {     min=MAX;     j=-1;     for(i=1;i<=g.n;i++)         if((g.adjmatrix[i][i]==0)&&(dist[i]<min)&&dist[i])        {j=i;         min=dist[i];}     if(j==-1)         break;     else     {         g.adjmatrix[j][j]=1;        for(i=1;i<=g.n;i++)        if((g.adjmatrix[i][i]==0)&&g.adjmatrix[j][i]&&!dist[i])        {         dist[i]=min+g.adjmatrix [j][i];         pre[i]=j;        }     }  }//for      printf("-------------------------------------------------\n");  for(i=1;i<=g.n;i++)  {      printf("%d\t",pre[i]);  }  printf("|");  printf("\n");  for(i=1;i<=g.n;i++)  {      printf("%d\t",dist[i]);  }  printf("|");  printf("\n");  printf("-------------------------------------------------\n");    /*输出路径*/   printf("该站点");printf("%d",w);   printf("到站点");printf("%d",v);   printf("的最佳乘车路线如下:\n");   if(pre[v]==w)       {printf("%d",w);        printf(" —> ");        printf("%d",v);}          else         if(pre[v])        {          a[++top]=v;          while(pre[v]!=w)            {              k=pre[v];            a[++top]=k;            v=k;            }          printf("%d",pre[v]);     //pre[v]==w;          while(top)            {             printf("—>");             printf("%d",a[top--]);            }        }        else            printf("不存在路径\n"); }void main(){  mgraph M;  int p=1,w,v;  menu();  printf("\n");  printf("请选择操作的代码:");   scanf("%d",&p);  while(0<p&&p<3)  {       switch(p)     {       case 1:             Create_Mgragh(M);             break;        case 2:             printf("请选择查询的两个站点的最佳路线为:");              scanf("%d%d",&w,&v);             SearchDijkstra(M,w,v);             printf("\n");             break;     }//switch    printf("\n");    printf("请继续选择操作的代码:");     scanf("%d",&p);  //错误在这里附近  }//while} 



[解决办法]
不可能处在printf和scanf上,感觉你里面用到的数组可能越界了
[解决办法]
main()里面没有错误 不知道楼主怎么出现的错误能具体点
这么长的代码

[解决办法]
这么长的代码,建议楼主要么提供测试数据,要么自己加断点,进行调试
[解决办法]
scanf("%d%c19s",&g.top[i].t_number,&g.top[i].t_name);

printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

[解决办法]
错误锁定在你的case中,也就是你的函数里面。而不是main函数中

热点排行