我目前正在尝试使用使用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!");
}
}
答案 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);