我3周前开始学习C,在学习 while循环时我试图建立一个附加程序,基本上你不断添加它添加的数字,在第二个数字之后它会给你一个小计另外,如果你按0退出它会给你一个最后的总和然后退出。
现在我有一个主要的,一个额外的问题。主要的问题是,我必须在while函数之前使用sum = 0
,如果我在" while"之后使用它。它给了我输入的数字作为结果。现在我真的很想知道背后的想法是什么。当我像下面那样写它时它等于"总和0"
为了开始并在我输入另一个数字时更改值,或者背后还有其他一些想法。
另外一个问题是,为什么我需要使用2 getchar();
来使我的节目留在屏幕上,为什么不留一个?
#include <stdio.h>
int main(void)
{
float num;
float sum;
printf(" please enter a number +0 to start the program (0 to quit): \n");
scanf(" %f", &num);
sum =0; //THIS HERE**********************
while (num > 0)
{
printf("please enter integer:\n");
scanf("%f", &num);
sum = sum + num;
printf("current sum is = %f\n", sum);
}
printf("final sum is = %f\n", sum);
getchar();
getchar();
return 0;
}
答案 0 :(得分:5)
如果将sum=0
放在while
循环中,则每次循环循环时都会调用它。
这意味着当您到达sum=sum+num
时,您实际上将计算sum=0+num
。
你有两个使用两个getchar()
来电,因为第一个是吸收了一个未被scanf
吸收的额外角色。可能这个角色是换行符,所以你看不到它。第二个getchar()
然后让你的终端保持打开状态,因为它正在等待一个角色。
要弄清楚我的假设对于第一个getchar()
是否正确,你可以试试这个:
char temp = getchar();
printf("%d",(int)temp); //Print out the character number from the first getchar
getchar(); //This keeps the window open
答案 1 :(得分:1)
如果我在
while
之后使用它,它会给我输入的数字作为结果。
这是因为当你这样做时
while (num > 0) {
sum = 0;
...
sum = sum + num;
}
sum
在while
循环的先前迭代中累积的值在每次循环迭代时都被擦除,这意味着只有最后一个值会被添加到sum
(并作为增加的结果保留。)
为什么我需要使用2
getchar();
因为当scanf
消耗最终用户输入的最后一个号码时,它会读取所有内容,但不包括'\n'
字符,该字符对应于 Enter 关键。此'\n'
字符保留在缓冲区中,等待程序使用。 getchar()
的第一个电话会消耗“挥之不去”'\n'
,而第二个电话会让您的节目保持在屏幕上,直到您再次按下Enter键。
答案 2 :(得分:1)
=
与数学=
不同。这并不意味着双方将永久地相互平等;相反,它意味着应该计算右侧,并且结果应该分配到左侧的变量。之后,另一行可能会将变量值更改为其他值。
因此,sum = sum + num;
表示要添加sum
和num
的当前值,并将结果放回sum
。为了使其按照您希望的方式工作,sum
必须在第一次执行此行时为0;因此,你需要sum = 0;
某个地方。但是,如果此行在循环内,则会重复执行,以便前一个求和的结果消失,并在每个新数字之前替换为0
。