鱼C论坛

 找回密码
 立即注册
查看: 1374|回复: 3

while循环问题

[复制链接]
发表于 2016-11-14 18:55:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
{
  int n,status;

  printf("请输入一个1~7之间的整数(输入0退出程序):");
  status = scanf("%d",&n);
  while(1 != status)
  {
    printf("输入不合法!请重新输入:");
    status = scanf("%d",&n);
  }
  loop1:switch(n)
  {
     case 1:printf("Monday\n");break;
     case 2:printf("Tuesday\n");break;
     case 3:printf("Wensday\n");break;
     case 4:printf("Thursday\n");break;
     case 5:printf("Friday\n");break;
     case 6:printf("Saturday\n");break;
     case 7:printf("Sunday\n");break;
     default:
            printf("输入的数字不在1~7之间!请重新输入(输入0退出程序):");
            scanf("%d",&n);
            goto loop1;
            if(0 == n)
            {
             break;
            }
  }
  return 0;
}
while循环的想法是,如果输入的是非整型数据的话就重新输入。但是我输入一个字母的话while就陷入一个无限循环,不停的执行while里的printf()函数,而且while里的scanf()函数也不会执行。
但是如果我修改一下代码:
  status = scanf("%d",&n);
  while(1 == status)
  {
    status = scanf("%d",&n);
  }
在这里面如果我输入的是一个整型的数据,程序可以进入while而且还会执行while里的scanf()函数。如果我输入一个非整型数据,while不执行。
这是为什么呢?有没有大手解释一下原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-14 19:55:28 | 显示全部楼层
你调试一下不就知道了吗?
能写这么长的程序,你不要告诉我你不会调试
http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D583
#include <stdio.h>

int main()
{
        int n, status;

        printf("请输入一个1~7之间的整数(输入0退出程序):");
        status = scanf("%d", &n);
        while(1 != status)
        {
                printf("输入不合法!请重新输入:");

                int c;
                while(((c = getchar()) != '\n') && (c != EOF)); // 清空 stdin

                status = scanf("%d", &n);
        }
loop1:
        switch(n)
        {
        case 1:printf("Monday\n"); break;
        case 2:printf("Tuesday\n"); break;
        case 3:printf("Wensday\n"); break;
        case 4:printf("Thursday\n"); break;
        case 5:printf("Friday\n"); break;
        case 6:printf("Saturday\n"); break;
        case 7:printf("Sunday\n"); break;
        default:
                printf("输入的数字不在1~7之间!请重新输入(输入0退出程序):");
                scanf("%d", &n);
                goto loop1;
                if(0 == n)
                {
                        break;
                }
        }

      return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 20:06:00 | 显示全部楼层
人造人 发表于 2016-11-14 19:55
你调试一下不就知道了吗?
能写这么长的程序,你不要告诉我你不会调试
http://bbs.fishc.com/forum.php?m ...

我调试了,但是没有发现出问题的原因。刚才查了一下书,才知道如果scanf()没有读取成功,值会一直留在输入队列里。所以要把错误的输入剔除出去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-14 20:46:32 | 显示全部楼层
forbear 发表于 2016-11-14 20:06
我调试了,但是没有发现出问题的原因。刚才查了一下书,才知道如果scanf()没有读取成功,值会一直留在输 ...

一定要学会调试哦,程序应该是调试出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表