从用户添加数字的简单程序

时间:2012-03-13 19:39:50

标签: 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;
            }   
            printf("%d\n", k);
    }

但是我在运行程序时会发生什么:

1  
2  
3  
4  
5  
5  
16

基本上,它要求我提供第六个数字(显然,我只需要5个),并且它还会在最终结果中添加一个数字。 (1 + 2 + 3 + 4 + 5 = 15)。

对此有任何想法。我在某处犯了一个简单的错误吗?

5 个答案:

答案 0 :(得分:1)

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

int k = 0;

代替。

然后,当你这样做的时候     k = k + j

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

也就是说,你也可以使用k = k + j;

的快捷方式
k += j;

C程序员必须完成这个模式,以便专门为它构建一个语言快捷方式。

在你的for循环中,它在C中的约定从0开始并且工作到&lt;你的最大数量:

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

我不确定为什么会要求额外的时间,但请尝试设置循环,看看它是否有效。

答案 1 :(得分:1)

正如其他人所说,您错误地初始化了k,但我怀疑造成问题的原因是您使用的是scanf("%d\n", &j);而不是scanf("%d", &j);scanf()忽略了导致比赛的空白。

答案 2 :(得分:1)

最初k = 1。然后,您将数字12345添加到其中。总而言之,他们总结为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. */
}

答案 3 :(得分:0)

这就是你想要的,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);
}

答案 4 :(得分:0)

&#39; \ n&#39;角色是不必要的。我怀疑你是在混合你的printf和scanf语法:P

相关问题