想知道 while 循环
Wondering about while loop
我 3 周前开始学习 C,在学习 while 循环时 我尝试构建一个加法程序,基本上你不断添加数字,它会添加它们,在第二个数字之后它给出你每次添加的小计,如果你按 0 退出,它会给你一个最终的总和,然后退出。
现在我有一个主要问题,一个附加问题。主要问题是,我必须在 while 函数之前使用 sum = 0
,如果我在 "the while" 之后使用它,它会给我输入的数字作为结果。现在我真的很想知道它背后的想法是什么。当我像下面这样写时,它是否等于 "sum with 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;
}
如果将 sum=0
放在 while
循环中,每次 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
If I use it after the while
it gives me the number I entered as the result.
这是因为当你这样做时
while (num > 0) {
sum = 0;
...
sum = sum + num;
}
在 while
循环的先前迭代中由 sum
累积的值在每次循环迭代时都会被擦除,这意味着只有最后一个值会添加到 sum
(并作为添加的结果保留)。
why do I need to use 2 getchar();
因为当 scanf
使用最终用户输入的最后一个数字时,它会读取所有内容,但不包括 '\n'
字符,该字符对应于 输入键。这个 '\n'
字符保留在缓冲区中,等待您的程序使用。 getchar()
的第一个调用消耗了 "lingering" '\n'
,而第二个调用使您的程序停留在屏幕上,直到您再次按下 enter。
大多数编程语言中的 =
不同于数学上的 =
。这并不意味着双方将永远平等;相反,这意味着应该计算右侧,并且结果应该赋值给左侧的变量。稍后,另一行可能会将变量值更改为其他值。
因此,sum = sum + num;
表示将sum
和num
的当前值相加,将结果放回sum
。为了让它按照您希望的方式工作,sum
必须在该行第一次执行时为 0;因此,你需要 sum = 0;
某处。但是,如果这一行在循环内部,则重复执行,这样之前求和的结果就消失了,取而代之的是每个新数前的0
我 3 周前开始学习 C,在学习 while 循环时 我尝试构建一个加法程序,基本上你不断添加数字,它会添加它们,在第二个数字之后它给出你每次添加的小计,如果你按 0 退出,它会给你一个最终的总和,然后退出。
现在我有一个主要问题,一个附加问题。主要问题是,我必须在 while 函数之前使用 sum = 0
,如果我在 "the while" 之后使用它,它会给我输入的数字作为结果。现在我真的很想知道它背后的想法是什么。当我像下面这样写时,它是否等于 "sum with 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;
}
如果将 sum=0
放在 while
循环中,每次 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
If I use it after the
while
it gives me the number I entered as the result.
这是因为当你这样做时
while (num > 0) {
sum = 0;
...
sum = sum + num;
}
在 while
循环的先前迭代中由 sum
累积的值在每次循环迭代时都会被擦除,这意味着只有最后一个值会添加到 sum
(并作为添加的结果保留)。
why do I need to use 2
getchar();
因为当 scanf
使用最终用户输入的最后一个数字时,它会读取所有内容,但不包括 '\n'
字符,该字符对应于 输入键。这个 '\n'
字符保留在缓冲区中,等待您的程序使用。 getchar()
的第一个调用消耗了 "lingering" '\n'
,而第二个调用使您的程序停留在屏幕上,直到您再次按下 enter。
=
不同于数学上的 =
。这并不意味着双方将永远平等;相反,这意味着应该计算右侧,并且结果应该赋值给左侧的变量。稍后,另一行可能会将变量值更改为其他值。
因此,sum = sum + num;
表示将sum
和num
的当前值相加,将结果放回sum
。为了让它按照您希望的方式工作,sum
必须在该行第一次执行时为 0;因此,你需要 sum = 0;
某处。但是,如果这一行在循环内部,则重复执行,这样之前求和的结果就消失了,取而代之的是每个新数前的0