将字符串的数字成员(类型为char)转换为C:RPN解释器中的int类型

时间:2016-11-18 22:40:42

标签: c rpn

我目前正在尝试使用使用struct实现的堆栈在C中创建一个反向波兰表示法解释器。它应该采用所有单位数值(0-9)和运算符+-*/,并通过退出程序拒绝所有其他值。 / p>

我正在尝试捕获整个表达式,因为它以字符串形式输入,其类型为char,但是当我使用isdigit()时,它总是返回非零函数(IE,它不是数字)即使它似乎是对用户。我相信这与字符串是char类型的事实有关,但我不认为我可以使用其他任何东西,否则我会在输入运算符时收到错误消息。

错误如下:假设我在函数中输入"11+"。在调试中,我可以看到它出现在手表中。推进程序,我看到isdigit ()已返回1而不是0,因此if语句条件已满足,程序以exit(1)退出; IDE没有提供特定的错误消息。

有没有办法实现只将字符串的“数字”转换为int类型,还是我必须做其他事情?

这是功能。虽然它仍然是原始的和未完成的,但这显示错误:

void parseRPN(TopStack *st)
{
char Input[50];
int i;
do{
    printf("please enter an expression in single-digit integers" 
        "using Reverse Polish notation:");
    scanf("%s",&Input);
    if (sizeof(Input)/sizeof(int)>=50)
        {
            printf("that expression was too large for the RPN engine to handle!"
                "please break it down into smaller sub-tasks.\n");
            fflush(stdin);
            continue;
        }
    break;
}while(true);

for (i=0;i<50;i++)
    {
        int ErrorDetect=isdigit(Input[i]);
        if (ErrorDetect==0 && (Input[i]) != '+' || '-' || '*' || '/')
        {
            printf("Error: Invalid operand to RPN\nExiting...");
            exit(1);
        }
        else printf("great success!");
    }
}

1 个答案:

答案 0 :(得分:2)

当然无意中使用||
@J. Piquard也对此发表评论

// if (ErrorDetect==0 && (Input[i]) != '+' || '-' || '*' || '/')
if (ErrorDetect==0 && Input[i] != '+' || Input[i] != '-' || 
    Input[i] != '*' || Input[i] != '/')

这样的东西。为清晰起见,建议添加()。我认为OP需要不同的逻辑。

if (ErrorDetect || (Input[i] != '+' && Input[i] != '-' && 
    Input[i] != '*' && Input[i] != '/'))

可能存在其他编码问题,例如:

char Input[50];
// scanf("%s",&Input);
scanf("%49s",&Input);