资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

这个程序编译运行都没有出现错误,但是不能完成编程意愿???请大家帮忙看看!

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

这是数据结构中的括号匹配练习,编译通过,但是单步运行时当进入initStack函数,运行到52行时再F11就出现一个find   source对话框,显示please   enter   the   path   for   DBGHEAP.C.     大家看看这是什么问题?谢谢!  
   
   
   
  1               #include<iostream.h>    
  2               #include   <stdio.h>  
  3               #include<malloc.h>    
  4               #include<stdlib.h>    
  5               #define   STACKLIST   100    
  6               #define   ADD   10    
  7                
  8               struct   Stack    
  9               {    
  10             char   *base;    
  11             char   *top;    
  12             int   stacksize;    
  13             };    
   
  14             int   initStack(Stack   &S);    
  15             int   push(Stack   &S,char   e);    
  16             int   pop(Stack   &S);    
  17             void   main()    
  18             {    
  19             Stack   A;    
  20             initStack(A);    
  21             char   ch=getchar();    
  22             while(ch!=.)    
  23             {    
  24             switch(ch)    
  25             {    
  26             case   [:    
  27             case   (:    
  28             case   {:   push(A,   ch);   break;    
  29             case   ]:   if(*A.top==[)   pop(A);   break;    
  30             case   ):   if(*A.top==()   pop(A);   break;    
  31             case   }:   if(*A.top=={)   pop(A);   break;    
  32             default:   cout<<"error   input!";    
  33             }    
  34             ch=getchar();  
  35             }    
  36             }    
  37  
  38  
  39             int   initStack(Stack   &S)    
  40             {    
  41             S.base=(char*)malloc(STACKLIST*sizeof(char));    
  42             if(!S.base)   exit(-1);    
  43             S.top=S.base;    
  44             S.stacksize=STACKLIST;    
  45             cout<<"OK!";  
  46             return   0;    
  47             }    
  48             int   push(Stack   &S,char   e)    
  49             {    
  50             if(S.top-S.base>=S.stacksize)    
  51             {    
  52             S.base=(char   *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));    
  53             if(!S.base)   exit(-1);    
  54             S.top=S.base+S.stacksize;    
  55             S.stacksize+=ADD;    
  56             }    
  57             *S.top++=e;    
  58             return   0;    
  59             }    
  60             int   pop(Stack   &S)    
  61             {    
  62             if(S.top==S.base)   return   -1;    
  63             --S.top;    
  64             for(char   *p=S.base;p<=S.top;p++)    
  65             cout<<*p;    
  66             return   0;    
  67             }

网友回答:

发表者:wialways

发一个没有行号吧。  
  方便复制到编译器

发表者:iicup

52             S.base=(char   *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));    
   
  F11,调试器试图进入  
  realloc函数内部,realloc库函数没有提供源代码,  
  所以调试程序希望您告诉它源文件在哪里。  
  实际上程序没有问题。  
  (其他库函数也一样,比如后面的realloc和exit)  
  您可以:  
  (1)在这里按F10,而不是F11来跳过。  
  (2)选择“忽略”或者“取消”等,  
        调试器会显示汇编代码,  
  然后就可以继续了。

发表者:liudaqin

你可以用另一种方法试一试,让程序运行到光标位置,调试工具条上有这一项:->{   }

发表者:iicup

//   Dev   C++   4.9.8.0  
  #include<iostream>    
  #include   <cstdio>  
  #include<cstdlib>    
  using   namespace   std;  
   
  #define   STACKLIST   100    
  #define   ADD   10    
   
  struct   Stack    
  {    
    char   *base;    
    char   *top;    
    int   stacksize;    
  };    
   
  int   initStack(Stack   &S);    
  int   push(Stack   &S,char   e);    
  int   pop(Stack   &S);    
   
  int   main()    
  {    
    Stack   A;    
    initStack(A);    
    char   ch=getchar();    
    while(ch!=.)    
    {    
      switch(ch)    
      {    
        case   [:    
        case   (:    
        case   {:   push(A,   ch);   break;    
        case   ]:   if(*A.top==[)   pop(A);   break;    
        case   ):   if(*A.top==()   pop(A);   break;    
        case   }:   if(*A.top=={)   pop(A);   break;    
        default:   cout<<"error   input!";    
      }    
      ch=getchar();  
    }    
    system("pause");  
    return   0;  
  }    
   
   
  int   initStack(Stack   &S)    
  {    
    S.base=(char*)malloc(STACKLIST*sizeof(char));    
    if(!S.base)   exit(-1);    
    S.top=S.base;    
    S.stacksize=STACKLIST;    
    cout<<"OK!\n";  
    return   0;    
  }  
     
  int   push(Stack   &S,char   e)    
  {    
    if(S.top-S.base>=S.stacksize)    
    {    
      int   off   =   S.top   -   S.base;   //   添加!!  
      S.base=(char   *)realloc(S.base,(S.stacksize+ADD)*sizeof(char));    
      if(!S.base)   exit(-1);    
      //   S.top=S.base+S.stacksize;    
      S.top   =   S.base+off;   //   修改!!  
      S.stacksize+=ADD;    
    }    
    *S.top++=e;    
    return   0;    
  }    
   
  int   pop(Stack   &S)    
  {    
    if(S.top==S.base)   return   -1;    
    --S.top;    
    for(char   *p=S.base;p<=S.top;p++)    
    cout<<*p;    
    return   0;    
  }    
   
  /*  
  运行结果:  
  OK!  
  {[()[{()}]{}[]]}.  
  请按任意键继续   .   .   .    
  */

发表者:iicup

一般情况,我修改的地方如果不修改,  
  也不会出错。  
  也就是说,您的程序本身是正确的。  
  可能是您输入的方法不对。  
   
  应该一次输入整个串,包括最后的.,  
  否则,  
  ch=getchar();  
  就会得到回车\n,使   ch   ==   \n,  
  从而输出:   error   input!  
 


 

 
热门推荐笔记本: IBM笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved