为什么while循环执行不了,菜鸟很懵逼

向阳森 2020-08-08 09:31:22
#include <stdio.h>
int main(void) {
int number, min, max, count, sum,status;
sum = 0;
count = 0;
printf("Enter lower and upper integer limits:");
scanf_s("%d %d", &min, &max);
status= (scanf_s("%d %d", &min, &max)==2);
while (status) {
for (number = min;min <= number <= max;number++) {
count = number * number;
sum += count;
}
printf("The sums of the squares from %d to %d is %d", min*min, max*max, sum);
printf("Enter next set of limits :");
scanf_s("%d %d", &min, &max);
}
printf("Done");
return 0;
}
...全文
1704 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_49489558 2020-08-11
  • 打赏
  • 举报
回复
问题不少,优化一下,我也是菜鸟,马上三年级 #include <stdio.h> int main() { int number, min, max, count, /*status,*/ sum; //sum = 0; count = 0; printf("Enter lower and upper integer limits:"); //scanf_s("%d %d", &min, &max); //status = (scanf_s("%d %d", &min, &max) == 2); while (scanf_s("%d %d", &min, &max)!=EOF) { sum = 0;//防止多次操作累加 for (number = min; number <= max; number++) { count = number * number; sum += count; } printf("The sums of the squares from %d to %d is %d", min , max , sum); //printf("Enter next set of limits :"); //scanf_s("%d %d", &min, &max); } printf("Done"); return 0; }
wxf54318 2020-08-09
  • 打赏
  • 举报
回复
应该是if (status) 否则死循环了
Aist-memory 2020-08-09
  • 打赏
  • 举报
回复
可以在while循环前打印一下status的值,看是否满足循环条件
均陵鼠侠 2020-08-09
  • 打赏
  • 举报
回复
谢邀。
scanf_s("%d %d", &min, &max);
status= (scanf_s("%d %d", &min, &max)==2);
while (status) {

以上,scanf_s调用了两次,这是没有必要的。可以保留第二个。
while语句要求括号内的控制表达式不为0,但是在while语句的循环体内又没有改变status的值,所以并不是没有循环,是它无法停下来。
棉猴 2020-08-08
  • 打赏
  • 举报
回复
调试结果的图片发错了,不好意思
棉猴 2020-08-08
  • 打赏
  • 举报
回复
int number, min, max, count, sum, status;
	sum = 0;
	count = 0;
	printf("Enter lower and upper integer limits:");
	//scanf_s("%d %d", &min, &max);//------注释掉这一行,下面还有一行代码是输入-------
	status = (scanf_s("%d %d", &min, &max) == 2);
	while (status) {
		for (number = min; min <= number&& number <= max; number++) {//min <= number <= max改为min <= number&& number <= max
			count = number * number;
			sum += count;
		}
		printf("The sums of the squares from %d to %d is %d\n", min*min, max*max, sum);//-----添加换行符号--------
		printf("Enter next set of limits :");
		scanf_s("%d %d", &min, &max);
	}
	printf("Done");
VS2015 C++环境跳调试 关于修改min <= number <= max的原因是,在C++中,min <= number <= max并不是像数学中的number大于等于min并且number小于等于max的意思,而是先计算min<=number,这个表达式的结果是true或者false,即1和0,假设是true,则是1,之后再比较1<=max,如果你输入的max是大于等于1的,则min <= number <= max的结果始终是true,就像楼上朋友说的,for是死循环了。所以要把min <= number <= max改成 min <= number&& number <= max
qybao 2020-08-08
  • 打赏
  • 举报
回复
执行不了还好,要是执行了就死循环了
while (status) //循环里没有改变status的处理,一旦进入循环就死循环了

执行不了说明你输入不对
status= (scanf_s("%d %d", &min, &max)==2);
所以status为false
根据的你的代码,你要输入两次数据才行
scanf_s("%d %d", &min, &max); //这里需要输入一次
status= (scanf_s("%d %d", &min, &max)==2); //这里还需要输入一次(为啥不和上面合并?),所以估计这里你忘了输入直接回车,就造成输入不对


70,012

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧