我正在尝试编写一个简单的程序,它使用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)。
对此有任何想法。我在某处犯了一个简单的错误吗?
答案 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
。然后,您将数字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. */
}
答案 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