想知道while循环

时间:2015-03-04 19:47:27

标签: c while-loop

我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;
}

3 个答案:

答案 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;
}

sumwhile循环的先前迭代中累积的值在每次循环迭代时都被擦除,这意味着只有最后一个值会被添加到sum(并作为增加的结果保留。)

  

为什么我需要使用2 getchar();

因为当scanf消耗最终用户输入的最后一个号码时,它会读取所有内容,但不包括'\n'字符,该字符对应于 Enter 关键。此'\n'字符保留在缓冲区中,等待程序使用。 getchar()的第一个电话会消耗“挥之不去”'\n',而第二个电话会让您的节目保持在屏幕上,直到您再次按下Enter键。

答案 2 :(得分:1)

大多数编程语言中的

=与数学=不同。这并不意味着双方将永久地相互平等;相反,它意味着应该计算右侧,并且结果应该分配到左侧的变量。之后,另一行可能会将变量值更改为其他值。

因此,sum = sum + num;表示要添加sumnum的当前值,并将结果放回sum。为了使其按照您希望的方式工作,sum必须在第一次执行此行时为0;因此,你需要sum = 0;某个地方。但是,如果此行在循环内,则会重复执行,以便前一个求和的结果消失,并在每个新数字之前替换为0