向上的蜗牛 发表于 2018-7-21 16:40:35

为什么将while后面括号里的status==1删除之后程序变成了死循环

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

向上的蜗牛 发表于 2018-7-21 16:42:42

我感觉好像可以删去的把{:10_255:}

TyCk 发表于 2018-7-21 19:04:53

你这里是两层循环啊,status还控制着外层循环的进行,也就是是否在让用户输入。
删掉的话,外层肯定是死循环了。

向上的蜗牛 发表于 2018-7-21 20:26:48

TyCk 发表于 2018-7-21 19:04
你这里是两层循环啊,status还控制着外层循环的进行,也就是是否在让用户输入。
删掉的话,外层肯定是死循 ...

emmmmm,这个status的值不是由上面的scanf函数控制的吗,我测试下来好像是里面那个循环在输入非法数字时跳不出来呢{:10_255:}

TyCk 发表于 2018-7-21 21:59:09

向上的蜗牛 发表于 2018-7-21 20:26
emmmmm,这个status的值不是由上面的scanf函数控制的吗,我测试下来好像是里面那个循环在输入非法数字时 ...

嗯,我在codeblocks里测试了下,结果输出为0,要把sum改成float类型,输出的%.2f,又加了两句getchar()才显示出结果来,不知为啥。
跳出来的话,用个英文字母就可以。
status由scanf控制,读取到非数字的时候,就不等于1了,两层循环就都跳出来了。
哦,你这么说,意思或许是把请输入合法数字那行放到第二个do里,外层循环就不需要了,但是事实是,当你输入类似于“5.4 4.3 5 5”的时候,它会循环读取,也就是先读取到5.4,然后判断空格不等于回车,继续读取4.3,依次下去,当读取结束,getchar为回车,status等于1,内层循环结束,外层循环继续,要求用户继续输入合法数字,这样说的话,你应该就明白了。
另外,建议你去看下scanf函数的详解,论坛里有的。

向上的蜗牛 发表于 2018-7-22 14:33:10

TyCk 发表于 2018-7-21 21:59
嗯,我在codeblocks里测试了下,结果输出为0,要把sum改成float类型,输出的%.2f,又加了两句getchar()才 ...

我好像说错了,我是想着把与运算符后面的那个去了的{:10_247:}

TyCk 发表于 2018-7-22 18:31:22

向上的蜗牛 发表于 2018-7-22 14:33
我好像说错了,我是想着把与运算符后面的那个去了的

所以呢,我上面那段话,解释清楚没有,你有没有理解?{:10_312:}

向上的蜗牛 发表于 2018-7-22 20:27:06

TyCk 发表于 2018-7-22 18:31
所以呢,我上面那段话,解释清楚没有,你有没有理解?

{:10_323:}
页: [1]
查看完整版本: 为什么将while后面括号里的status==1删除之后程序变成了死循环