黑马程序员技术交流社区
标题: 使用while的困惑 [打印本页]
作者: 高伟杰 时间: 2014-3-16 06:00
标题: 使用while的困惑
本帖最后由 高伟杰 于 2014-3-24 20:03 编辑
//输入一个整数month代表月份,根据月份输出对应的季节。 用户在输入负数和大于12的数值时,提示重新输入
#include <stdio.h>
int main(){
int month;
printf("请输入数值:\n");
scanf("%d",&month);
while (month<=0){
//提示用户重新输入数值
printf("请重新输入数值:\n");
//输入月份
scanf("%d",&month);
}
while (month>12){
printf("请重新输入数值:\n");
scanf("%d",&month);
}
//判断月份区域
if (month<3 || month ==12){
printf("现在是冬季\n");
}
else if (month<6){
printf("现在是春季\n");
}
else if (month<9){
printf("现在是夏季\n");
}
else{
printf("现在是秋季\n");
}
return 0;
}
//代码中使用了两次while,不知道有什么好的写法可以去掉第二个while,只在一个循环体中判断数值大于等于0且小于等于12
作者: 脸皮猴 时间: 2014-3-16 08:27
while ( (month<=0) || (month>12) ){
//提示用户重新输入数值
printf("请重新输入数值:\n");
//输入月份
scanf("%d",&month);
}
作者: 脸皮猴 时间: 2014-3-16 08:29
满足其中任何一个这个while都不会跳出!
作者: keycola 时间: 2014-3-16 10:54
兄台代码:
#include <stdio.h>
int main(){
int month;
printf("请输入数值:\n");
scanf("%d",&month);
while (month<=0){
//提示用户重新输入数值
printf("请重新输入数值:\n");
//输入月份
scanf("%d",&month);
}
while (month>12){
printf("请重新输入数值:\n");
scanf("%d",&month);
}
兄台的代码有一个bug, 如果用户开始输入的月份是 13 ,就会不会满足 month <= 0 这个条件,自然会进入下一个条件
month > 12 然后如果用户在这输入 0的 就会不满足 month > 12 ,所以最终的月份会是 0月
建议兄台可以使用 do{}while();
如 do{
printf("请输入月份:\n");
scanf("%d", &month);
}while(month < 1 || month > 12);
不知道兄台是否明白
作者: 沙洲冷 时间: 2014-3-16 14:16
就像上面这位仁兄说的一样,楼主分开写是有bug的,必须像二楼那样,把两个条件写在一块儿判断才行:while ( (month<=0) || (month>12) ,希望楼主采纳。
作者: 高伟杰 时间: 2014-3-16 17:59
懂了,谢谢,原来我在写的时候是这样写的while (条件1 ||条件2 ),每次执行都是错误输出。原来是要分开写才行。
作者: 高伟杰 时间: 2014-3-16 18:00
谢谢解惑,我马上试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |