【问题标题】:Wondering about while loop想知道while循环
【发布时间】:2015-03-05 03:54:20
【问题描述】:

我在 3 周前开始学习 C,在学习 while 循环时,我尝试构建一个加法程序,基本上你不断地添加数字,然后将它们相加,在第二个数字之后,它会给你一个小计另外,如果你按 0 退出它会给你一个最终的金额然后退出。 现在我有一个主要问题,一个附加问题。主要问题是,我必须在 while 函数之前使用sum = 0,如果我在“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;
}

【问题讨论】:

    标签: c while-loop


    【解决方案1】:

    如果您将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
    

    【讨论】:

      【解决方案2】:

      如果我在while 之后使用它,它会给出我输入的数字作为结果。

      这是因为当你这样做时

      while (num > 0) {
          sum = 0;
          ...
          sum = sum + num;
      }
      

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

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

      因为当scanf 使用最终用户输入的最后一个数字时,它会读取直到'\n' 字符之前的所有内容,但不包括与Enter 键相对应的字符。这个'\n' 字符保留在缓冲区中,等待您的程序使用。第一次调用getchar() 消耗了“挥之不去的”'\n',而第二次调用使您的程序停留在屏幕上,直到您再次按 Enter 键。

      【讨论】:

        【解决方案3】:

        大多数编程语言中的= 与数学上的= 不同。这并不意味着双方将永远平等;相反,这意味着应该计算右侧,并将结果分配给左侧的变量。稍后,另一行可能会将变量值更改为其他值。

        因此,sum = sum + num; 表示将sumnum 的当前值相加,并将结果放回sum。为了让它按您希望的方式工作,sum 在第一次执行此行时必须为 0;因此,您需要 sum = 0; 某处。但是,如果这一行在循环内,就会重复执行,这样之前求和的结果就消失了,在每一个新数字之前被0代替。

        【讨论】:

          猜你喜欢
          • 2022-09-25
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 1970-01-01
          • 2015-12-05
          • 1970-01-01
          • 1970-01-01
          • 2021-07-09
          相关资源
          最近更新 更多