我的数组的第一个元素来自哪里,它是什么?
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;
}
}
因为 c
从 operands + 1
开始,第一个元素将被写入 operators[c - operands] => operators[1]
。因此,无论 operators[0]
最初包含什么,都将保留在那里。
您可以通过实际初始化定义的运算符来测试它:
char operators[TotalOps] = { '#' }; // will initialize the first element to '#', all others to '[=11=]'
它应该输出# + + + +
而不是º + + + +
。
因此您需要更改代码以使用以索引 0 而不是 1 开头的运算符数组
我正在编写代码以使用命令行参数生成 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;
}
}
因为 c
从 operands + 1
开始,第一个元素将被写入 operators[c - operands] => operators[1]
。因此,无论 operators[0]
最初包含什么,都将保留在那里。
您可以通过实际初始化定义的运算符来测试它:
char operators[TotalOps] = { '#' }; // will initialize the first element to '#', all others to '[=11=]'
它应该输出# + + + +
而不是º + + + +
。
因此您需要更改代码以使用以索引 0 而不是 1 开头的运算符数组