2 u011475211 u011475211 于 2014.12.15 16:37 提问

循环哪里出错了,逻辑错误查找,高手帮帮忙

#include
int main()
{
int donation=0,amount=0; //donation代表每次捐献的金额,amout代表总额
while(amount<10) //捐款超过十万就不再接受捐献
{
scanf("%d\n",&donation);
amount=amount+donation;
}
printf("%d",amount);
return 0;
}

为什么每次输入的总额超过十万才能中止while循环,而实际输出的捐款额却是10万,
比如我输入8,1,1共计10万却不能退出循环,而必须要输入8,1,1,1共计11万,才能中止
循环,而输出的总额却是10万.

10个回答

caozhy
caozhy   Ds   Rxr 2014.12.15 17:36
已采纳

devmiao之前是对的,去掉\n,你没有听她的。

devmiao
devmiao   Ds   Rxr 2014.12.15 16:39

while(1) //捐款超过十万就不再接受捐献
{
scanf("%d\n",&donation);
if (amount+donation >10) break;
amount=amount+donation;
}
printf("%d",amount);
return 0;
}

u011475211
u011475211 你这个实际上还是用了if判断,我想请教你我的程序哪里出现了逻辑错误,大姐
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.15 17:35

换成
scanf("\n%d", &donation);

devmiao
devmiao   Ds   Rxr 2014.12.15 16:54

你对while的理解有问题
while只在循环开始的时候判断。

你的程序执行到amount=amount+donation;超过了10,它这次循环还是会执行,此时amount已经超过10了。

u011475211
u011475211 你倒是挺热心的,不过好像问题还是没有解决
大约 3 年之前 回复
u011475211
u011475211   2014.12.15 17:06

我调试时问题不是你说的那样,实际上当我依次输入1,2,3,4时,无法输出,必须输入一个新的数字比如5,但你看输出还是10,说明amount还是10,
而不是如你所说的超过10;

我依次调试发现我的scanf输入比较慢,输入1后必须输入2,donation的值才变成1,这让我百思不得其解,你单步调试下,不要想当然.有时候这样1个bug
会害死人的

我觉得我对while理解没有问题,你说while 只在循环开始时比较,那一开始条件符合的情况下,while就成死循环了

devmiao
devmiao   Ds   Rxr 2014.12.15 17:08

1 2 3 4当然不行,因为是 > 10,=10的时候还是会执行循环。

u011475211
u011475211 我用的是<10,=10时循环会中止,你运行一遍试下再说
大约 3 年之前 回复
devmiao
devmiao   Ds   Rxr 2014.12.15 17:08

一开始条件符合的情况,也不会死循环

small_snowflake
small_snowflake   2014.12.15 17:48

好像是scanf的双引号里不要加空格**

如果你加了空格,每输一个数就要按一次空格!****

small_snowflake
small_snowflake   2014.12.15 17:48

好像是scanf的双引号里不要加空格**

如果你加了空格,每输一个数就要按一次空格!****

xuzuning
xuzuning   Ds   Rxr 2014.12.15 18:39
 while(amount<10) //捐款超过十万就不再接受捐献
 {
   scanf("%d",&donation); //不能要 \n
   amount=amount+donation;
 }
 printf("%d",amount);
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!