Откуда появился первый элемент моего массива и что это? - PullRequest
0 голосов
/ 19 марта 2019

Я пишу код для создания программируемого на 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 - это общее количество операторов. И операторы [] это их массив.

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

1 Ответ

0 голосов
/ 21 марта 2019

Присмотритесь к

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'

It должен output # + + + + вместо º + + + +.

Поэтому вам нужно изменить код, чтобы использовать массив операторов, начинающийся с индекса 0 вместо 1

...