我正在编写代码以使用命令行参数生成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]);
}
答案 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;
}
}
由于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开头的operator数组