c - 我的数组的第一个元素来自哪里,它是什么?
问题描述
我正在编写代码以使用命令行参数生成 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]);
}
解决方案
仔细看看
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 开头的操作符数组
推荐阅读
- xcode - Xcode 永远不会完成构建并耗尽计算机上的内存
- php - php 使用指定以外的其他类
- angular2-routing - Angular5 - 使用routerlinkactive指令在页面重新加载时未添加活动类
- javascript - 检查项目是否有下划线,然后使用 javascript 创建一个子菜单
- ruby-on-rails - 从 Faraday 使用端口 3000 调用 localhost
- sap - 在拥有 15 亿多条记录的大表上进行保留的最佳方法是什么?(SAP HANA SP12)
- ruby-on-rails - rspec .to receive(:method_name) 正确用法
- google-bigquery - 如何从大查询表中删除分区列?
- ruby-on-rails - 迁移生态系统的最佳解决方案
- python - DRF - 嵌套路由器 - 在 POST/PUT/PATCH 上创建/更新嵌套对象