鱼C论坛

 找回密码
 立即注册
查看: 2905|回复: 4

[已解决]自己调试过,输入1+2#,在main函数里 else if('+' == c || '-' == c)里出错,跳到P...

[复制链接]
发表于 2017-7-26 13:36:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>

  4. #define Stack_max_size 20

  5. typedef char ElemType;

  6. //定义栈的基础结构体
  7. typedef struct
  8. {
  9.     ElemType *base;//栈底指针
  10.     ElemType *top;//栈顶指针
  11.     int Stack_size;//栈的长度
  12. }Sqstack;//栈的别名

  13. //栈的初始化
  14. void Init_stack(Sqstack *s)
  15. {
  16.     s->base = (ElemType*)malloc(Stack_max_size * sizeof(ElemType));
  17.     if(!s->base)
  18.     {
  19.         printf("申请内存失败!\n");
  20.         exit(0);
  21.     }
  22.     s->top == s->base;
  23.     s->Stack_size = Stack_max_size;
  24. }

  25. //栈的压入操作
  26. void Push(Sqstack *s, ElemType c)
  27. {
  28.     if(s->top - s->base >= s->Stack_size)
  29.     {
  30.         printf("该栈已满!\n");
  31.         exit(0);
  32.     }
  33.     *(s->top) = c;
  34.     s->top++;
  35. }

  36. //栈的弹出操作
  37. int Pop(Sqstack *s, ElemType *c)
  38. {
  39.     if(s->base == s->top)
  40.     {
  41.         printf("该栈已空!\n");
  42.         exit(0);
  43.     }
  44.     s->top--;
  45.     *c = *(s->top);
  46.    
  47.     return 0;
  48. }

  49. //栈长度测量函数
  50. int StackLen(Sqstack s)
  51. {
  52.     return (s.top - s.base);
  53. }
  54. int main()
  55. {
  56.     Sqstack s;//创建一个栈的变量

  57.     Init_stack(&s);//初始化栈

  58.     char c;//用于接收输入的数字和运算符
  59.     char e;

  60.     printf("请输入需要转换的表达式, 输入#为结束:\n");
  61.     scanf("%c", &c);

  62.     while(c != '#')
  63.     {
  64.        if(c>='0' && c<='9')
  65.        {
  66.            printf("%c", c);
  67.        }
  68.        else if(')' == c)
  69.        {
  70.            Pop(&s, &e);
  71.            while('(' != e)
  72.            {
  73.                printf("%c", e);
  74.                Pop(&s, &e);
  75.            }
  76.        }
  77.        else if('+' == c || '-' == c)
  78.        {
  79.         
  80.            if(!StackLen(s))
  81.            {
  82.                Push(&s, c);
  83.            }
  84.            else
  85.            {
  86.                do
  87.                {
  88.                   Pop(&s, &e);//拿出栈顶元素进行比较

  89.                   if('(' == e)
  90.                   {
  91.                       Push(&s, e);
  92.                   }
  93.                   else
  94.                   {
  95.                       printf("%c", e);
  96.                   }
  97.                }while(s.top == s.base || '(' == e);

  98.                Push(&s, c);//对比结束后将新接收的字符压入栈中
  99.            }
  100.        }
  101.        else if('*'==c || '/'==c || ')'==c)
  102.        {
  103.            Push(&s, c);
  104.        }
  105.        else
  106.        {
  107.            printf("出错,请检查用户输入!\n");
  108.        }
  109.        scanf("%c", &c);
  110.     }

  111.    while(s.top - s.base != 0)//结束后,将栈中剩余元素打印出来
  112.    {
  113.        Pop(&s, &e);
  114.        printf("%c", e);
  115.    }
  116.     return 0;
  117. }
复制代码
最佳答案
2017-7-26 17:22:59

除了下面的等号,运行正常,至于逻辑上有没有错误,不知道。还有一点就是 由程序员自行分配的内存空间应该叫堆。

2017-07-26_171944.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-26 17:22:59 | 显示全部楼层    本楼为最佳答案   

除了下面的等号,运行正常,至于逻辑上有没有错误,不知道。还有一点就是 由程序员自行分配的内存空间应该叫堆。

2017-07-26_171944.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 13:21:12 | 显示全部楼层
ba21 发表于 2017-7-26 17:22
除了下面的等号,运行正常,至于逻辑上有没有错误,不知道。还有一点就是 由程序员自行分配的内存空间应 ...

哦,谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-27 13:46:07 | 显示全部楼层

最佳呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 14:48:42 | 显示全部楼层

给了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 14:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表