Почему мой код меняет значения во время вычисления postfix - PullRequest
0 голосов
/ 16 октября 2019

Значение неожиданно заменяется во время расчета.

Я изменил тип элемента в постфиксном калькуляторе. И я попытался сделать новый стек, когда новый цикл запускается снова.

'''postfix calculator

int postcalc(char *postfix)
{

int i, A, B, val;
char ch,c;
Stack S=CreateStack (100);
i=0;
int num1;
while (postfix[i] !='\0')
{
ch = postfix[i];
if (isdigit(ch))
{
    num1 = atoi(&ch);
    Push(num1,S);
}
else if(ch=='+' || ch=='-' || ch=='*')
{
    if(IsEmpty(S)) return 0;
    else  A=TopAndPop(S);
    if(IsEmpty(S)) return 0;
    else  B=TopAndPop(S);

    switch (ch)
        {
            case '+':
            val = B+A;
            break;

            case '-':
            val = B-A;
            break;

            case '*':
            val = B*A;
            break;
        }
        Push(val,S);
        printf("%d,%d\n",val,Top(S));
}
i++;
}
if(S->TopOfStack != 1) return 0;
return Top(S);
}

TopAndPop возвращает вершину стека и одновременно удаляет вершину стека. И если элемента нет, возвращается «Пустой стек»

'' 'test calculator' ''

void test1()
{
int i, v;
char eq[][128] = {
"1234+*5678+*-9*++",
"1234+*+5678+*-9*+",
"1234+*+5678+*-9*",
"234+*+5678+*-9*+",
"1234+*+678+*-9*+"
    };

printf("[Test1: postfix expression validity check]\n"); 
for( i=0 ; i<5 ; i++ ) {
v = postcalc(eq[i]);
if( v == 0 ) {
    printf("   %s is not valid\n",eq[i]);
} else if( v == -750 ) {
    printf("   %s is valid and correctly calcualted: %d\n",eq[i],v);
} else {
    printf("   %s is valid but not correctly calcualted: %d\n",eq[i],v);            
}
}
}

В тесте калькулятора (test1) первые два результата равны -750и другой результат не имеет значения. но фактический результат - 18, потому что -765 изменен на 3. введите описание изображения здесь

...