黑马程序员技术交流社区

标题: 使用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
keycola 发表于 2014-3-16 10:54
兄台代码:
#include
int main(){

谢谢解惑,我马上试试




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2