C 一个简单的程序,可以添加用户输入的数字

C 一个简单的程序,可以添加用户输入的数字,c,scanf,C,Scanf,我正在尝试编写一个简单的程序,使用scanf从用户那里输入5个数字并将它们相加。这是我目前掌握的代码 int main() { int i; int j=1; int k=1; for (i=1; i<= 5; i++) { scanf("%d\n", &j); k = k+j; }

我正在尝试编写一个简单的程序,使用scanf从用户那里输入5个数字并将它们相加。这是我目前掌握的代码

  int main()   
    {

    int i;  
    int j=1;  
    int k=1;

            for (i=1; i<= 5; i++)
            {
                  scanf("%d\n", &j);
                  k = k+j;
            }   
            printf("%d\n", k);
    }
基本上,它要求我输入第六个数字(显然,我只需要5个),并且它还向最终结果添加了一个数字。(1+2+3+4+5=15)


有什么想法吗。我是不是在某个地方犯了一个简单的错误?

您似乎正在将k(您保存的总和)初始化为一,然后将所有其他数字相加。试试这个:

int k = 0;
相反

那么,当你 k=k+j

第一次,k将是0,而不是1。你也不需要做j=1

也就是说,您也可以使用快捷方式来表示k=k+j

k += j;
C程序员必须如此频繁地使用这种模式,以至于他们专门为它在语言中构建了一个快捷方式

在for循环中,C中的惯例是从零开始,然后工作到<最大值,以及:

for (i = 0; i < 5; i++)
(i=0;i<5;i++)的


我不知道为什么它会要求额外的时间,但是试着将循环设置为那样,看看它是否有效。

您似乎正在将k(您保存和的数字)初始化为一,然后将所有其他数字相加。试试这个:

int k = 0;
相反

那么,当你 k=k+j

第一次,k将是0,而不是1。你也不需要做j=1

也就是说,您也可以使用快捷方式来表示k=k+j

k += j;
C程序员必须如此频繁地使用这种模式,以至于他们专门为它在语言中构建了一个快捷方式

在for循环中,C中的惯例是从零开始,然后工作到<最大值,以及:

for (i = 0; i < 5; i++)
(i=0;i<5;i++)的


我不知道为什么它会要求额外的时间,但请尝试将您的循环设置为那样,看看它是否有效。

正如其他人所说,您正在错误地初始化
k
,但我怀疑导致问题的原因是您正在使用
scanf(“%d\n”,&j))而不是
scanf(“%d”和&j)
scanf()
忽略匹配前的空格。

正如其他人所说,您正在错误地初始化
k
,但我怀疑导致问题的原因是您正在使用
scanf(“%d\n”,&j)而不是
scanf(“%d”和&j)
scanf()
忽略匹配前的空格。

最初
k=1
。然后将数字
1
2
3
4
5
添加到其中。它们加起来是
1+1+2+3+4+5
,也就是
16

您通常应该考虑初始化变量

  • i
    不需要在
    for
    循环之前初始化
  • j
    不需要初始化,因为它将从输入中读取
  • k
    需要正确初始化。但是因为它有特定的用途,你应该称它为
    sum
    ,而不是
    k
    。当你总结事情时,你应该从
    0
    开始
此外,您应该检查对
scanf
的调用是否成功。在这种情况下,函数返回
1

if (scanf("%d", &j) == 1) {
  sum += j;
} else {
  fprintf(stderr, "Invalid input.\n");
  break; /* exit the for loop. */
}

最初
k=1
。然后将数字
1
2
3
4
5
添加到其中。它们加起来是
1+1+2+3+4+5
,也就是
16

您通常应该考虑初始化变量

  • i
    不需要在
    for
    循环之前初始化
  • j
    不需要初始化,因为它将从输入中读取
  • k
    需要正确初始化。但是因为它有特定的用途,你应该称它为
    sum
    ,而不是
    k
    。当你总结事情时,你应该从
    0
    开始
此外,您应该检查对
scanf
的调用是否成功。在这种情况下,函数返回
1

if (scanf("%d", &j) == 1) {
  sum += j;
} else {
  fprintf(stderr, "Invalid input.\n");
  break; /* exit the for loop. */
}

这就是您想要的,k在0处初始化,并在没有作为结束行的\n的情况下执行scanf输入:

int main() {
    int i;  
    int j=0;  
    int k=0;
    for (i=1; i<= 5; i++){
        scanf("%d", &j);
        k = k+j;
    }   
    printf("%d\n", k);
}
intmain(){
int i;
int j=0;
int k=0;

对于(i=1;i这是您想要的,k初始化为0,并在没有作为结束线的\n的情况下执行scanf输入:

int main() {
    int i;  
    int j=0;  
    int k=0;
    for (i=1; i<= 5; i++){
        scanf("%d", &j);
        k = k+j;
    }   
    printf("%d\n", k);
}
intmain(){
int i;
int j=0;
int k=0;

对于(i=1;i该'\n'字符是不必要的。我怀疑您混淆了printf和scanf语法:p

该'\n'字符是不必要的。我怀疑您混淆了printf和scanf语法:p

您是从
k=1
开始的,而不是
k=0
。为什么要在
scanf
调用中添加新行?您是从
k=1
,而不是
k=0
。为什么要在
scanf
呼叫中添加新行?谢谢大家的帮助!不。没有第六次迭代。从程序显示
int k=1;
的那一刻起,额外的
1
就在
k
中。谢谢大家的帮助!不。没有第六次迭代。添加从程序显示
int k=1;
的那一刻起,onal
1
就在
k
中。