Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C:RPN解释器中将字符串的数字成员(char类型)转换为int类型_C_Rpn - Fatal编程技术网

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

在C:RPN解释器中将字符串的数字成员(char类型)转换为int类型,c,rpn,C,Rpn,我目前正在尝试用C语言创建一个反向波兰语符号解释程序,使用struct实现的堆栈。它应该接受所有的单位数值(0-9)和运算符+、-、*和/,并通过退出程序拒绝所有其他值 我试图捕获整个表达式,因为它是作为字符串键入的,具有类型char,但是当我使用isdigit()时,它总是返回一个非零函数(即,它不是一个数字),即使用户看起来是这样。我相信这与字符串是char类型有关,但我认为我不能使用其他任何东西,否则在输入运算符时会收到错误消息 错误如下:假设我在函数中输入“11+”。在调试中,我可以在手

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

我试图捕获整个表达式,因为它是作为字符串键入的,具有类型char,但是当我使用
isdigit()
时,它总是返回一个非零函数(即,它不是一个数字),即使用户看起来是这样。我相信这与字符串是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!");
    }
}
void parseRPN(TopStack*st)
{
字符输入[50];
int i;
做{
printf(“请输入一个单位数整数的表达式”
“使用反向波兰符号:”;
scanf(“%s”,&Input);
如果(sizeof(Input)/sizeof(int)>=50)
{
printf(“该表达式太大,RPN引擎无法处理!”
“请将其分解为更小的子任务。\n”);
fflush(stdin);
继续;
}
打破
}虽然(正确);

对于(i=0;i当然是非故意使用
|

也有人对此发表评论

// 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);

请在您的帖子中添加您收到的“错误”。建议:使用
strlen(Input)
而不是
sizeof(Input)/sizeof(int)
,然后对(i=0;这是一个好主意,我正在使用,所以我也会添加它。虽然这并不能解决问题…是的,但请回答我的第一个评论…你得到了什么错误?事实上,if条件
(ErrorDetect==0&(输入[i])!='+'| |'-'| |'*'| |'/'))
不执行您想要的操作,ErrorDetect可以是任何值以具有真实条件。添加括号如下
((ErrorDetect==0)和&((输入[i])!='+'| |'-'| |'*'| |'/'))
。并处理运算符。谢谢!这修复了数字解释,但没有修复运算符解释,当我输入11+,只是这次在“+”上时,它仍然会退出程序。为了清晰起见,我尝试在某些地方添加括号,但没有用::新语句是
if((ErrorDetect==0)和((input[I]!=“+”)|(input[I]!='-')(输入[i]!='*')(输入[i]!='/')
@jamesharris查看
for(i=0;iI已将该代码更改为
for(i=0;i
'\0'
,而不是
'/0'
,这是一个转义序列,表示值为0的字符常量或空字符。所有C字符串都以空字符结尾。避免
for(i=0;i