黑马程序员技术交流社区

标题: 怎么限制用户输入的数是整数,而不是小数 [打印本页]

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

作者: lyricdon    时间: 2015-5-17 21:34
你直接加一句printf,然后把输入的值用if检测一下,如果不是0-100重新执行scanf操作
作者: cui0wei0    时间: 2015-5-17 21:44
本帖最后由 cui0wei0 于 2015-5-17 21:53 编辑

感觉好高深啊, C语言好像对数据类型的判断很不严格, 你输入汉字他都能跑出来
作者: 梦初醉    时间: 2015-5-18 01:00
IF 语句判断呗 , 自己百度一下,考虑考虑好思路!!!!!!
作者: 香草芭芙    时间: 2015-5-18 02:29
  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. }
复制代码

作者: 逆流瞅瞅    时间: 2015-5-18 09:32
香草芭芙 发表于 2015-5-18 02:29

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

一语中的,没有非数字就没有. -  就行了,
作者: 香草芭芙    时间: 2015-5-18 12:09
逆流瞅瞅 发表于 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 21:31
香草芭芙 发表于 2015-5-18 12:09
我想不出来, while循环里的 i 如果是 i++ , 那下面 if 判断里的 i 的值 都是 i+1,  i = 0 的情况 怎么判 ...

抱歉,早上没看太明白您写的while语句里的判断。
当时没看到scanf的重新输入c,再次while循环时c的内容已改变。见笑。  
你写的用字符串接收输入的内容并作判断,思路值得借鉴。
作者: 尹世伟    时间: 2015-5-18 22:00
这个把输入的数据转成字符串放到数组里然后检查数组的每个元素,有小数点就说明不是整数 然后再提示输入 如此循环  这只是我的想法  我刚来基础班的菜鸟
作者: ⒈苆都s.兲憶    时间: 2015-5-18 22:51
直接用个if语句判断,如果输入的不是,就提示重新输入!
作者: Tc401464359    时间: 2015-5-19 00:26
香草芭芙 发表于 2015-5-18 02:29

额,我才学c语言基础。你写的这个看不懂
作者: Tc401464359    时间: 2015-5-19 00:28
梦初醉 发表于 2015-5-18 01:00
IF 语句判断呗 , 自己百度一下,考虑考虑好思路!!!!!!

嗯,谢谢
作者: wangguanyang    时间: 2015-5-19 07:23
用条件语句判断
作者: wodeheimalife    时间: 2015-5-19 10:11
看不懂。。。
作者: 猴子啊猴子    时间: 2015-5-19 10:30
学习了.楼上说的很详细
作者: 埃林的奶酪    时间: 2015-5-19 17:39
过来学习一下,那么怎么判断是不是整数呢?
作者: 李闯    时间: 2015-5-19 21:08
过来 学习下经验
作者: 等风继续吹    时间: 2015-5-19 21:21
include <stdio.h>

int main(){
    double a=0;
    while (a<=0||a>100||a!=(int)a ) {
        printf("请输入一个1-100以内的整数\n");
        scanf("%lf",&a);
    }}     这样应该可以,;楼主试试
作者: 万物长生    时间: 2015-5-19 21:32
学习学习..
作者: ambition    时间: 2015-5-20 08:20
香草芭芙 发表于 2015-5-18 02:29

好厉害,学习了!!
作者: chensc    时间: 2015-5-20 19:07
学习学习!
作者: 等风继续吹    时间: 2015-5-20 22:29
老板,给点分吧,
作者: 宋兴1228    时间: 2015-5-20 22:32
学习一下
作者: hehelaicaicai    时间: 2015-5-21 06:42
用a!=(int)a判断,这个好像是个好办法。
作者: wangguanyang    时间: 2015-5-21 08:30
用if条件语句判断输入值的合法性,输入的值小于0或者大于100都是不合法的数值,如果输入非法数值,提示用户:你输入的值是非法的!然后写上return 0;执行结束程序,后面的代码将不会被执行。
作者: x331275955    时间: 2015-5-21 18:45
分数也可以是小数啊,59.5的成绩没及格的大有人在,在定义成绩变量的时候直接就用float,不要用int,得贴合实际啊.
作者: 李双良    时间: 2015-5-21 22:03
菜鸟路过...
作者: nsswift    时间: 2015-5-23 22:23
过来 学习下经验
作者: fixer    时间: 2015-5-24 00:14
楼主,加个判断语句就可以了,你的技术分怎么搞到的?嘿嘿
作者: lyricdon    时间: 2015-5-24 00:47
加IF语句判断,如果不是,就返回输入SCANF
作者: XiaoBaoMi    时间: 2015-5-25 23:52
scanf 后接if 加goto
作者: ⒈苆都s.兲憶    时间: 2015-5-26 23:16
定义一个变量n,int  n;在使用一个while语句,while (n<0 || n>100){printf (请输入0~100的整数:\n);scan( "%d",&n);}就可以了




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