严凯 发表于 2020-11-17 16:11:48

超级简单问题求助

#include <stdio.h>

int main()
{
      float num = 0;
      double sum = 0;
      int status;

      do
      {
                printf("请输入合法的数字:");
                do
                {
                        sum = sum + num;
                        status = scanf("%f", &num);
                } while (getchar() != '\n' && status == 1);
      } while(status == 1);

      printf("结果是:%.2lf\n", sum);

      return 0;
}

//就是我这个是要输入数字,然后相加,当输入不是数字的时候退出循环,就是哪个第一个while语句,哪个getchar(),当我输入1再空格再输入2再空格,是不是当我空格的时候,就已经又进行一次内循环了?

风过无痕1989 发表于 2020-11-17 16:18:07

是的,回为你用的是 do ... while 结构,先运行一次循环体,再进行判断

昨非 发表于 2020-11-17 16:39:15

https://www.runoob.com/cprogramming/c-do-while-loop.html

不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do...while 循环是在循环的尾部检查它的条件。

do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。

也就是,先执行一遍,然后输入1,判断输入是否为数字,以此决定是否执行第二次循环

严凯 发表于 2020-11-17 18:23:17

是我表达错了,应该是第二个do while语句,就是我的意思是,我可以这样输入1 3 4 5然后回车,他又提示我请输入合法的数字,假如我又输入3,然后又提示我,加入我再输入一个q,然后跳出循环,得到结果为16,我就是想问一下,为什么输入1 3 4 5,没有出现问题?

昨非 发表于 2020-11-18 23:08:26

严凯 发表于 2020-11-17 18:23
是我表达错了,应该是第二个do while语句,就是我的意思是,我可以这样输入1 3 4 5然后回车,他又提示我请 ...

因为每次循环scanf时一个一个读取的,getchar也只判断一位,所以只要没有读取到非法字符,status不变,就会一直循环
页: [1]
查看完整版本: 超级简单问题求助