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

Where has the first element of my array come from, and what is it?

我正在编写代码以使用命令行参数生成 C 编程的 RPN 计算器。我对程序要完成的第一个计算有疑问,因为我不知道我的运算符数组中的第一个元素并影响了计算。

我的命令行显示:

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

我的数组应该是 {+, +, +, +}

但是打印时的输出是:

º + + + +

这是我将运算符添加到数组的 for 循环。 cmd 行上我的数字中的操作数。 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 是总数。的运营商。 operators[] 是它们的数组。

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

仔细看看

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 '[=11=]'

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

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