A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如图:    
         我刚刚学c语言,在写一个习题:提醒用户输入一个0-100的分数 score ,然后输出成绩等级
     我写的没错,但是我想到假如用户输入的不是0-100的数,而是小数,或者负数,或者更大的整数,虽然我定义了int类型,编译器会自动强制转换类型,  
     但是我想用一些条件来限制输入的是0-100的整数,怎么解决啊    求大神说明一下。用c语言哦
   

本帖被以下淘专辑推荐:

33 个回复

倒序浏览
你直接加一句printf,然后把输入的值用if检测一下,如果不是0-100重新执行scanf操作
回复 使用道具 举报
本帖最后由 cui0wei0 于 2015-5-17 21:53 编辑

感觉好高深啊, C语言好像对数据类型的判断很不严格, 你输入汉字他都能跑出来
回复 使用道具 举报
IF 语句判断呗 , 自己百度一下,考虑考虑好思路!!!!!!
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int atoi(const char *nptr);

  4. int main()
  5. {
  6.     char c[1024];

  7.     printf("请输入一个整数:\n");
  8.     scanf("%s", c);

  9.     int i = 0;
  10.     while (c[i] != '\0') {
  11.         if (c[i] == '-') {
  12.             printf("不能输入负数,请重新输入...\n");
  13.             scanf("%s", c);
  14.             i = 0;
  15.             continue;
  16.         }
  17.         else if (c[i] == '.') {
  18.             printf("不能输入小数,请重新输入..\n");
  19.             scanf("%s", c);
  20.             i = 0;
  21.             continue;
  22.         }
  23.         else if ((c[i] < '0') || (c[i] > '9')) {
  24.             printf("不是数字,请重新输入...\n");
  25.             scanf("%s", c);
  26.             i = 0;
  27.             continue;
  28.         }
  29.         else if ((atoi(c) < 0) || (atoi(c) > 100)) {
  30.             printf("不在0~100范围内,请重新输入...\n");
  31.             scanf("%s", c);
  32.             i = 0;
  33.             continue;
  34.         }
  35.         i++;
  36.     }
  37.    
  38.     int result = atoi(c);
  39.     printf("%d\n", result);
  40.    
  41.     return 0;
  42. }
复制代码
回复 使用道具 举报 2 0

你的while循环里continue写在i++前面,while会不会陷入死循环。
最好将i++写到while条件判断里while (c[i++] != '\0')
回复 使用道具 举报
Emma 中级黑马 2015-5-18 09:35:14
7#
如果输入是5.8  scanf(%d)得到的是5,点和8都没读入。所以我的方法是读入字符串 scanf(%s),然后判断里面有没有非数字的字符,就可以确定是整数了
回复 使用道具 举报
gamyc 中级黑马 2015-5-18 12:00:43
8#
Emma 发表于 2015-5-18 09:35
如果输入是5.8  scanf(%d)得到的是5,点和8都没读入。所以我的方法是读入字符串 scanf(%s),然后判断里面 ...

一语中的,没有非数字就没有. -  就行了,
回复 使用道具 举报
逆流瞅瞅 发表于 2015-5-18 09:32
你的while循环里continue写在i++前面,while会不会陷入死循环。
最好将i++写到while条件判断里while (c ! ...

我想不出来, while循环里的 i 如果是 i++ , 那下面 if 判断里的 i 的值 都是 i+1,  i = 0 的情况 怎么判断呢?
求代码...
回复 使用道具 举报
香草芭芙 发表于 2015-5-18 12:09
我想不出来, while循环里的 i 如果是 i++ , 那下面 if 判断里的 i 的值 都是 i+1,  i = 0 的情况 怎么判 ...

抱歉,早上没看太明白您写的while语句里的判断。
当时没看到scanf的重新输入c,再次while循环时c的内容已改变。见笑。  
你写的用字符串接收输入的内容并作判断,思路值得借鉴。
回复 使用道具 举报
这个把输入的数据转成字符串放到数组里然后检查数组的每个元素,有小数点就说明不是整数 然后再提示输入 如此循环  这只是我的想法  我刚来基础班的菜鸟
回复 使用道具 举报
直接用个if语句判断,如果输入的不是,就提示重新输入!
回复 使用道具 举报

额,我才学c语言基础。你写的这个看不懂
回复 使用道具 举报
梦初醉 发表于 2015-5-18 01:00
IF 语句判断呗 , 自己百度一下,考虑考虑好思路!!!!!!

嗯,谢谢
回复 使用道具 举报
用条件语句判断
回复 使用道具 举报
看不懂。。。
回复 使用道具 举报
学习了.楼上说的很详细
回复 使用道具 举报
过来学习一下,那么怎么判断是不是整数呢?
回复 使用道具 举报
过来 学习下经验
回复 使用道具 举报
include <stdio.h>

int main(){
    double a=0;
    while (a<=0||a>100||a!=(int)a ) {
        printf("请输入一个1-100以内的整数\n");
        scanf("%lf",&a);
    }}     这样应该可以,;楼主试试
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马