为什么输出在方框中而不是数字是问号

时间:2019-06-22 07:33:19

标签: c

我正在对后缀转换程序做一个简单的中缀,但是在输入结果后缀表达式时,数字以问号形式出现在框中。我该怎么做才能使输出为数字?

我不知道代码的哪一部分导致了此问题。

bool convert(char inf[], char post[])
{
    char term;
    int i, k, length, oprn;
    nd top;
    top = createStack();
    length = strlen(inf);
    for(i=0, k=-1; i<length; i++)
    {
        term = inf[i];
        if(isdigit(term))
        {
            oprn = term - '0';
            post[++k] = oprn;
        }
        else if (term == '(')
        {
            push(&top,term);
        }
        else if (term == ')')
        {
            bool empty;
            empty = isEmpty(top);
            while(!empty && peek(top) != '(')
                post[++k] = pop(&top);
            if(!empty && peek(top) != '(')
                return -1; //the expression is not valid
            else
                pop(&top);
        }
        else //if term is an operator
        {
            bool empty;
            empty = isEmpty(top);
            if(empty){ 
                push(&top,term);}
            else
            {
                while(!empty && prec(term)<=prec(peek(top)))
                    post[++k] = pop(&top);
                push(&top,term);    
            }
        }
    }//end of for loop
    while(!isEmpty(top))
        post[++k] = pop(&top);
    post[++k] = '\0';
}

我在main中使用此函数调用了

int main(void)
{
    bool ok;
    char inFix[s];
    char postFix[s]="";

    getInfix(inFix);
    ok = convert(inFix,postFix);
    if(ok)
    {
        printf("\n\nThe resulting postfix expression is: ");
        puts(postFix);
    }
    else
    {
        printf("\n\nAn error has occurred...");
    }
    getch();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您在此处将term减去了'0',这意味着您的数字现在不再是ASCII'0'到ASCII'9',而是数字char 0到char 9,它对应于一堆ASCII控制字符。

    if(isdigit(term))
    {
        oprn = term - '0';
        post[++k] = oprn;
    }