我数组的第一个元素从哪里来?它是什么?

时间:2019-03-19 12:44:17

标签: c arrays rpn

我正在编写代码以使用命令行参数生成C编程的RPN计算器。我对程序要执行的第一次计算有问题,因为我的运算符数组中的第一个元素对我来说是未知的,并且会影响计算。

我的命令行显示为:

$ ./rpn.exe 1 2 3 4 5 + + + +

我的数组应为{+,+,+,+}

但是打印时的输出是:

º + + + +

这是我的for循环,将运算符添加到数组中。我在cmd行上的Numbers中的操作数。 Is_Op只是为了解决错误。

for(int c = operands + 1; c < argc; c++)
{
    char b = *argv[c];
    if(Is_Op(b) == 1)
    {
        fprintf(stderr, "%c is not an operator", b);
        return 1;
    }
    else
    {
        operators[c - operands] = b;
    }
}

这是我的阵列打印功能。 TotalOps是总数。运营商。而且operator []是它们的数组。

for(int count = 0; count <= TotalOps; count++)
{
    printf("%c ", operators[count]);
}

1 个答案:

答案 0 :(得分:0)

仔细看看

for(int c = operands + 1; c < argc; c++)
{
    char b = *argv[c];
    if(Is_Op(b) == 1)
    {
        fprintf(stderr, "%c is not an operator", b);
        return 1;
    }
    else
    {
        operators[c - operands] = b;
    }
}

由于coperands + 1开始,因此第一个元素将被写入operators[c - operands] => operators[1]。因此,operators[0]最初包含的内容将保留在那里。

您可以通过在定义时实际初始化运算符来对此进行测试:

char operators[TotalOps] = { '#' }; // will initialize the first element to '#', all others to '\0'

应该输出# + + + +而不是º + + + +

因此,您需要更改代码以使用以索引0而不是1开头的operator数组