C 命令行编号添加程序产生错误的结果
我的代码:C 命令行编号添加程序产生错误的结果,c,C,我的代码: #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; } #包括 int ma
#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;
}
#包括
int main(int argc,char*argv[]){
int n=argc;
整数i,a,b,和;
对于(i=0;i
这段代码应该执行/a0 1 2 3
必须写入终端6
但写入42423
该程序的目的是发出命令行参数。但他没有使它正确的角度
argv[0]
保存最有可能不希望包含在循环中的可执行文件的名称。因此,需要从i=1
开始循环
根据您的输入,argv[0]
不包含数值,因此导致sscanf()
失败,使a
未初始化
因此,在您的代码中,主要问题是
b = a + sum;
其中,对于第一次迭代,a
和sum
都是具有不确定值的未初始化局部变量。因此,对于第一个循环,您正在调用
另外,a
作为int
,您需要为其使用%d
格式说明符
有两件事值得一提:
scanf()
family的返回值是否成功argv[0]
保存最有可能不希望包含在循环中的可执行文件的名称。因此,需要从i=1
开始循环
根据您的输入,argv[0]
不包含数值,因此导致sscanf()
失败,使a
未初始化
因此,在您的代码中,主要问题是
b = a + sum;
其中,对于第一次迭代,a
和sum
都是具有不确定值的未初始化局部变量。因此,对于第一个循环,您正在调用
另外,a
作为int
,您需要为其使用%d
格式说明符
有两件事值得一提:
scanf()
family的返回值是否成功- 您正在获取垃圾值,因为在声明时未初始化varuiablesum
- 只要初始化为
,u就会得到预期的结果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; }
#包括 #包括 int main(int argc,char*argv[]){ int n=argc; int i,a,b,和=0; 对于(i=0;i
- 您正在获取垃圾值,因为在声明时未初始化varuiablesum
- 只要初始化为
,u就会得到预期的结果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; }
#包括 #包括 int main(int argc,char*argv[]){ int n=argc; int i,a,b,和=0; 对于(i=0;i
scanf()
family.和sscanf(argv[i]、“%u”和&a)的返回值代码>应该是sscanf(argv[i]、“%d”、&a)
这就是为什么您总是需要检查scanf()
family.和sscanf(argv[i]、“%u”、&a)的返回值代码>应该是sscanf(argv[i]、“%d”、&a)代码>sum
在写入任何值之前使用,肯定会给编译器带来警告。@WeatherVane sorta'错过了那个,实际上很重要。现在更新,谢谢。:)sum
在写入任何值之前使用,肯定会给编译器一个警告。@WeatherVane sorta'错过了那个,实际上很重要。现在更新,谢谢。:)