| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2121 人关注过本帖
标题:我输入10,再输入英文字母,就进入死循环了,这是为什么
只看楼主 加入收藏
vs303791832
Rank: 2
来 自:地球
等 级:论坛游民
帖 子:87
专家分:12
注 册:2010-6-23
结帖率:76.92%
收藏
已结贴  问题点数:2 回复次数:9 
我输入10,再输入英文字母,就进入死循环了,这是为什么
#include<stdio.h>
int main(void)
{
  printf("                学校考试评分等级,注(是100分制)                   ");
  printf("\n按0退出,\n现在");
  float f;
  int fs;
  while (1)
  {
    printf("请输入分数:");
    scanf("%f", &f);
    fs = (int)f;
    if ( fs == 0 )
      break;
    switch (fs / 10)
    {
      case  10 :
        printf("A级评分\n");
        break;
      case  9 :
        printf("B级评分\n");
        break;
      case  8 :
        printf("C级评分\n");
        break;
      case 7 :
        printf("D级评分\n");
        break;
      case 6 :
        printf("E级评分\n");
        break;
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
      case 0:
        printf("60分以下都不及格 无评分\n");
        break;
      default:
      printf("无效输入\n");
    }
 
  }
  return 0;
}
我输入10,再输入英文字母,就进入死循环了,这是为什么
搜索更多相关主题的帖子: 字母 英文 输入 
2010-08-11 19:04
vs303791832
Rank: 2
来 自:地球
等 级:论坛游民
帖 子:87
专家分:12
注 册:2010-6-23
收藏
得分:0 
帮我解决下这问题

小白无敌,哈哈.......我成功了
2010-08-11 19:08
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:2 
以下是引用vs303791832在2010-8-11 19:04:37的发言:

#include
int main(void)
{
  printf("                学校考试评分等级,注(是100分制)                   ");
  printf("\n按0退出,\n现在");
  float f;     //这两句应该提前两行吧???
  int fs;

  while (1)
  {
    printf("请输入分数:");
    scanf("%f", &f);
    fs = (int)f;
    if ( fs == 0 )
      break;
    switch (fs / 10)
    {
      case  10 :
        printf("A级评分\n");
        break;
      case  9 :
        printf("B级评分\n");
        break;
      case  8 :
        printf("C级评分\n");
        break;
      case 7 :
        printf("D级评分\n");
        break;
      case 6 :
        printf("E级评分\n");
        break;
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
      case 0:
        printf("60分以下都不及格 无评分\n");
        break;
      default:
      printf("无效输入\n");
    }
    getchar();
  }
  return 0;
}
我输入10,再输入英文字母,就进入死循环了,这是为什么
最简单的修改就是如上面循环体内加一个getcghar();函数,替scanf过滤掉非法的输入。死循环就不会出现了!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 19:40
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 
楼上解答正确 这种情况一定要注意.
2010-08-11 19:47
maomaoyatou
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-7-28
收藏
得分:0 
你的程序不管什么时候输入字母都会进入死循环
2010-08-11 19:55
kaikai6678
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:8
专家分:12
注 册:2009-7-10
收藏
得分:0 
学习啦

热敏纸  http://www.
2010-08-11 21:27
燕强
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:78
专家分:188
注 册:2010-8-11
收藏
得分:0 
正确求解,,编写的不是很完善,忘大家改善!
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int getnum(void);
int main(void)
{
  int fs;
  printf("                学校考试评分等级,注(是100分制)                   ");
  printf("\n按0退出,\n现在");
  while (1)
  {
    fs = getnum();
    if(fs == -1)
        continue;
    if ( fs == 0 )
      break;
    switch (fs / 10)
    {
      case  10 :
        printf("A级评分\n");
        break;
      case  9 :
        printf("B级评分\n");
        break;
      case  8 :
        printf("C级评分\n");
        break;
      case 7 :
        printf("D级评分\n");
        break;
      case 6 :
        printf("E级评分\n");
        break;
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
      case 0:
        printf("60分以下都不及格 无评分\n");
        break;
      default:
      printf("无效输入\n");
    }

  }
  return 0;
}

int getnum(void)
{
    int num;
    char buf[100];
    char *s = buf;
    int c;
    printf("请输入分数:");
    while((c = getchar()) != '\n' && c != EOF)
    {
        if(!isdigit(c))
        {
            printf("无效输入\n");
            while(getchar() != '\n')/*消除输入流中的字符*/
                ;
            return -1;
        }
        *s++ = c;
    }
    *s = '\0';
    num = atoi(buf);
    return num;
}
2010-08-12 11:38
molin
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2010-4-17
收藏
得分:0 
本身就是个死循环
2010-08-12 14:13
vs303791832
Rank: 2
来 自:地球
等 级:论坛游民
帖 子:87
专家分:12
注 册:2010-6-23
收藏
得分:0 
学习了

小白无敌,哈哈.......我成功了
2010-08-15 13:49
前世是仙
Rank: 2
等 级:论坛游民
帖 子:14
专家分:18
注 册:2010-7-28
收藏
得分:0 
缓冲区问题 只要在scanf 前面加上 fflush(stdin)就行了
 #include<stdio.h>
int main(void)
{
  printf("                学校考试评分等级,注(是100分制)                   ");
  printf("\n按0退出,\n现在");
  float f;
  int fs;
  while (1)
  {
    printf("请输入分数:");
    fflush(stdin);            /////清空缓冲区
    scanf("%f", &f);
    fs = (int)f;
    if ( fs == 0 )
      break;
    switch (fs / 10)
    {
      case  10 :
        printf("A级评分\n");
        break;
      case  9 :
        printf("B级评分\n");
        break;
      case  8 :
        printf("C级评分\n");
        break;
      case 7 :
        printf("D级评分\n");
        break;
      case 6 :
        printf("E级评分\n");
        break;
      case 5:
      case 4:
      case 3:
      case 2:
      case 1:
      case 0:
        printf("60分以下都不及格 无评分\n");
        break;
      default:
      printf("无效输入\n");
    }

  }
  return 0;
}
2010-08-15 17:09
快速回复:我输入10,再输入英文字母,就进入死循环了,这是为什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018239 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved