我的代码:
#include <stdio.h>
int main(int argc, char*argv[]){
int n = argc;
int i, a, b, sum;
for(i = 0; i < n; i++){
sscanf(argv[i], "%u", &a);
b = a + sum;
sum = b;
}
printf("%d\n", sum);
return 0;
}
这段代码应该./a 0 1 2 3
必须写终端6
但写42423
。
该计划的目的是发布命令行参数金额。但他没有正确的角度。
答案 0 :(得分:5)
argv[0]
包含您可能不希望包含在循环中的可执行文件的名称。所以,你需要从i=1
开始循环。
根据您的输入,argv[0]
不包含数字值,因此导致sscanf()
失败,导致a
未初始化。
因此,在您的代码中,主要问题是,
b = a + sum;
其中,对于第一次迭代,a
和sum
都是具有不确定值的未初始化的局部变量。因此,对于第一个循环,您将重新调用undefined behavior。
此外,a
为int
,您需要使用%d
格式说明符。
要提两件事:
scanf()
系列的返回值是否成功。答案 1 :(得分:0)
您获得了垃圾值,因为您未在声明中初始化变量 sum 。
刚刚初始化为sum = 0
,您将获得预期结果。
或者您也可以使用以下代码。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char*argv[]){
int n = argc;
int i, a, b, sum=0;
for(i = 0; i < n; i++){
a = atoi(argv[i]);
sum += a;
}
printf("%d\n", sum);
return 0;
}