开发者社区> 问答> 正文

switch函数有错,执行case0后执行case1有错

int main()
{

int c; //开关控制变量
char m; //继续或退出控制变量
ALGraph G;

init_ALGraph(G); //初始化图

CreateUDN(G); //创建图
PrintAdjList(G); //打印图
//DFSTraverse(G,0); //深度优先搜索
menu();
cout<<"请输入一个游戏控制变量m:m为y或Y表示继续游戏,N或n表示退出游戏:";
cin>>m;
while('y'==m||'Y'==m)
{
cout<<"请输入一个整型开关控制变量c(c=0或1):";
cin>>c;
switch(c)
{
case 0:
{

        //求两点之间的简单路径
        char ch1,ch2;
        char *path;        //存放路径
        path=(char *)malloc(MAX_VERTEX_NUM*sizeof(char));

        cout<<"please input two points:"<<endl;
        cin>>ch1>>ch2;
        simple_Path(G,ch1,ch2,path);

        int i=0;
        while(path[i])
            cout<<path[i++];    //输出路径
        cout<<endl;
        break;
      }
   case 1:
      {
        //求点到点的最短路径
       char cha,chb;
       char *s_path;        //存放路径
       s_path=(char *)malloc( MAX_VERTEX_NUM*sizeof(char) );

       cout<<"please input two points:"<<endl;
       cin>>cha>>chb;
       short_Path(G,chb,cha,s_path);    //广度优先搜索

       int n=0;
       while(s_path[n])
          cout<<s_path[n++];    //输出路径
       cout<<endl;
       break;
      }
  default:
    cout<<"输入错误:"<<endl;
  }
cout<<"是否继续游戏:Y,y表示继续游戏,N,n表示退出游戏:";
cin>>m;
}

return 0;
}

展开
收起
a123456678 2016-03-23 11:27:48 2421 0
1 条回答
写回答
取消 提交回答
  • 其实就是变量作用域的问题,下面在case 0的代码定义了你的路径对吧,但它是在case 0里定义的局部变量,所以再一次循环跑到case 1里边运行的时候,
    这些局部变量就已经消亡了,

    char ch1,ch2;
    char *path; //存放路径

        path=(char *)malloc(MAX_VERTEX_NUM*sizeof(char));
    
        cout<<"please input two points:"<<endl;
        cin>>ch1>>ch2;

    所以

    char ch1,ch2;
    char *path;
    要放在while循环之外定义的。

    2019-07-17 19:10:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载