该程序应该计算参数的数量,遍历参数列表,每个参数将参数转换为整数并将其复制到数组,迭代数组的元素,将每个参数的值添加到a变量(这计算元素的总和),并打印总和.不会有超过15个参数.到目前为止,我有:
int sumofA (int sizeofA, int x, int y){ int i = sizeofA; if (i <= 15){ int z = x + y; return z; } } int main (int argc, char*argv[]){ int sizeofA = argc - 1; int i = 1; while (i <= sizeofA){ int x = GetInt (argc, argv, i); i = i + 1; int y = GetInt (argc, argv, i); printf ("%d\n", sumofA (sizeofA, x, y)); } return 0; }
好吧,现在(当给出除./a之外的三个参数时)它打印第一个参数和第二个参数的总和......然后是第二个和第三个...然后是第三个参数的值.为什么?
这是GetInt的代码(我必须使用它):
int GetInt (int argc, char * argv[], int i) { if (i < 0 || i >= argc) return 0; return atoi(argv[i]); }
我是否需要通过并将每个参数分配给一个整数(例如int z = GetInt (argc, argv, i + 2)
)?
这里有一些问题:
我没有在sumofA中定义,因此与它进行比较会产生未定义的行为.
如果i> = 15,则不清楚sumofA将返回什么.
你回到循环里面; 当然这不是你想要的.
您的代码实际上并未在数组A中存储任何内容.
请使用(gcc:-Wall -Werror -pedantic)上的所有警告标志编译代码,并确保代码编译时没有警告.
请注意,不需要变量大小:使用while(i
编辑:现在你添加了GetInt的代码,替换
GetInt (argc, argv, i);
同
atoi(argv[i]);
有没有使用GetInt,所以你完全可以将其删除.
最后:在你的问题中,你提到将数字存储在一个数组中,然后将它们相加.你想这样做,还是需要这样做(由于某些任务?)因为没有必要:只需将所有调用的结果添加到atoi.然后阵列A是多余的.
编辑2:我看到你在某些地方修复了代码.您当前的代码(CEST 23:31)分别为每个参数添加第一个参数并打印它们.你还没到那儿.祝好运!