Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 命令行编号添加程序产生错误的结果_C - Fatal编程技术网

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

    • 只要初始化为
      sum=0
      ,u就会得到预期的结果

    • 或者你也可以使用下面的代码

      #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

        • 只要初始化为
          sum=0
          ,u就会得到预期的结果

        • 或者你也可以使用下面的代码

          #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'错过了那个,实际上很重要。现在更新,谢谢。:)