首页 > 解决方案 > 我的数组的第一个元素来自哪里,它是什么?

问题描述

我正在编写代码以使用命令行参数生成 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]);
}

标签: carraysrpn

解决方案


仔细看看

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;
    }
}

由于c从 开始operands + 1,第一个元素将被写入operators[c - operands] => operators[1]。所以无论operators[0]最初包含什么,都会留在那里。

您可以通过在定义上实际初始化运算符来测试这一点:

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

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

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


推荐阅读