命令行号添加程序产生错误的结果

时间:2015-10-08 13:43:59

标签: 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;
}

这段代码应该./a 0 1 2 3必须写终端6但写42423

该计划的目的是发布命令行参数金额。但他没有正确的角度。

2 个答案:

答案 0 :(得分:5)

argv[0]包含您可能不希望包含在循环中的可执行文件的名称。所以,你需要从i=1开始循环。

根据您的输入,argv[0]不包含数字值,因此导致sscanf()失败,导致a未初始化。

因此,在您的代码中,主要问题是,

b = a + sum;

其中,对于第一次迭代,asum都是具有不确定值的未初始​​化的局部变量。因此,对于第一个循环,您将重新调用undefined behavior

此外,aint,您需要使用%d格式说明符。

要提两件事:

  1. 始终检查scanf()系列的返回值是否成功。
  2. 始终初始化您的本地变量。

答案 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;
    }