c - 我有一个使用 c 中的堆栈计算后缀方程的代码,但我得到了一些奇怪的交互
问题描述
我做了一个计算后缀方程的程序,但是进入while
循环时出现了问题,我不知道为什么。
我试图看看出了什么问题,所以我printf
在每一步都写了一个声明,以便找出问题所在。我的指针t
获取表中第一个地址的值exp
。这就是事情出错的地方。
在进入while
循环之前,查看是否*t
包含数字,该值是否符合预期。进入循环后,它变成随机数,但总是以值 -1 结束,原因我不知道,这会弄乱我的整个程序。我究竟做错了什么?
#include "MyStack.h"
int main(){
int i = 0, *t, exp[N], stack[N];
char c;
int n1, n2, obj;
printf ("Give postfix formula for evaluation:");
while((c = getchar()) != '\n'){
exp[i] = c - 48;
printf("%d\n", exp[i]);
i++;
}
t = exp;
printf("\nValue of pointer t %d\n",*t);
while(*t != '\n'){
printf("\nValue of pointer t after entering the loop %d\n",*t);
if(isdigit(*t)){
obj = *t - 48;
printf("%d\n", obj);
push(stack, t, obj);
}
else{
n1 = pop(stack, t);
n2 = pop(stack, t);
switch(*t){
case '+': push(stack, t, n1 + n2); break;
case '-': push(stack, t, n1 - n2); break;
case '*': push(stack, t, n1 * n2); break;
case '/': {
if(n1 == 0){
printf("Division with 0 is not eligible\n");
break;
}
else push(stack, t, n2 / n1); break;
}
}
}
}
for (i=0;i<N;i++)
printf ("%d\n",exp[i]);
printf("\nThe result of expression %s = %d\n\n",exp,pop(stack, t));
return 0;
}
void push(int stack [], int *t, int obj)
{
if ((*t) == (N - 1))
{
printf("Stack overflow...\n");
getch();
abort();
}
else stack[++(*t)] = obj;
}
int pop(int stack[], int *t)
{
int r;
if ((*t) < 0)
{
printf("Stack empty...\n");
printf("Error in expression\n");
getch();
abort();
}
else r = stack[(*t)--];
return (r);
}
"MyStack.h"
包含我需要的库和函数声明pop
和push
. 理想情况下,*t
应该包含第一个数字,然后将其推入stack
,然后继续推入下一个数字,直到*t
指向操作员。它应该会弹出从 推入的最后 2 位数字stack
,执行操作并在 ```stuck` 中返回结果。但相反,这发生了 http://prntscr.com/nrf7b9
如您所见,尽管它获得了正确的值,但它会继续循环并更改值,直到变为 -1 然后继续isdigit
运行。
解决方案
推荐阅读
- javascript - 在新窗口中弹出一个反应组件
- wordpress - 从 wordpress 中删除 RSS 提要
- c - 快速 PWM - OC0A (PB2) 上的 ATtiny2313
- brightway - 如何访问brightway中的交换属性
- php - Foreach 循环从结果中剥离所有数据
- javascript - 如何从 Monaco Editor 的操作列表中隐藏“命令面板”项
- transactions - Netsuite 机会领域
- mysql - 将记录添加到数据库时字符串值不正确
- php - 无法循环通过 PHP 中的 XML 节点
- java - API 级别 28 的 Android-ProviderTestCase2 不起作用