我正在对后缀转换程序做一个简单的中缀,但是在输入结果后缀表达式时,数字以问号形式出现在框中。我该怎么做才能使输出为数字?
我不知道代码的哪一部分导致了此问题。
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;
}
答案 0 :(得分:1)
您在此处将term
减去了'0',这意味着您的数字现在不再是ASCII'0'到ASCII'9',而是数字char 0到char 9,它对应于一堆ASCII控制字符。
if(isdigit(term))
{
oprn = term - '0';
post[++k] = oprn;
}