搜索
查看: 2349|回复: 5
打印 上一主题 下一主题

啊哈c例题问题

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-7 17:09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
从键盘输入一个正整数,让计算机判断这个数是否为一个一位数(1-9之间),如果是输出yes,不是则输出no。这道题
我的代码
#include <stdio.h>
int main()
{
int a;
    scanf("%d",&a);
    if(a>=1 && a<=9)
    printf("yes");
    else
    printf("no");
sleep(5000);
return 0;
}
为什么我输入5.5 也显示的是yes,题目上不是要求正整数吗?求指点怎么输入小数让他显示no啊

最佳答案

查看完整内容

就是说你输入一个小数,计算机仍然会当作一个整数读取 scanf是个很麻烦的函数,要求的类型(例如%d %f)和用户实际输入类型不相符时会出现很多预期之外的问题用了个ctype.h中的isdigit(i),i会被当作一个字符来处理,如果这个字符的字面值是个数字就返回1,否则返回0 例如 i = '5', isdigit(i)返回1 但是 i = 'a', isdigit(i)就会返回0 此外用了个getchar(),作用是从输入流中读取一个字符 这段代码忽略了用户输入是 +1 + ...
沙发
发表于 2013-3-7 17:09:51 | 只看该作者
a1399753221 发表于 2013-3-7 21:00
整数 不就是不包括小数吗?
麻烦一下 帮我写一下吧 谢谢啦

就是说你输入一个小数,计算机仍然会当作一个整数读取
scanf是个很麻烦的函数,要求的类型(例如%d %f)和用户实际输入类型不相符时会出现很多预期之外的问题
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. int main()
  5. {
  6.         int i, flag;
  7.         flag = 0;
  8.         i = getchar();
  9.         if(!isdigit(i))
  10.                 flag = 1;
  11.         else{
  12.                 i = getchar();
  13.                 if(i != '\n')
  14.                         flag = 1;
  15.         }
  16.         
  17.         
  18.         if(flag == 0)
  19.                 printf("yes\n");
  20.         else
  21.                 printf("no\n");

  22.         system("pause");

  23.         return 0;
  24. }
复制代码
用了个ctype.h中的isdigit(i),i会被当作一个字符来处理,如果这个字符的字面值是个数字就返回1,否则返回0
例如 i = '5', isdigit(i)返回1
但是 i = 'a', isdigit(i)就会返回0

此外用了个getchar(),作用是从输入流中读取一个字符

这段代码忽略了用户输入是 +1 +2 这种情况, 1,空格,空格,回车这类情况
只有输入是1,回车这类情会输出yes
板凳
发表于 2013-3-7 19:26:43 | 只看该作者
scanf("%d",&a)
会在你的输入中读取一个整数

想要一个fully functioning的程序,只用ahaC现在讲过的东西是不可能的
如果你有兴趣,我可以写一个演示一下
地板
 楼主| 发表于 2013-3-7 21:00:56 | 只看该作者
rosynirvana 发表于 2013-3-7 19:26
scanf("%d",&a)
会在你的输入中读取一个整数

整数 不就是不包括小数吗?
麻烦一下 帮我写一下吧 谢谢啦
5#
 楼主| 发表于 2013-3-21 14:47:24 | 只看该作者
rosynirvana 发表于 2013-3-7 21:30
就是说你输入一个小数,计算机仍然会当作一个整数读取
scanf是个很麻烦的函数,要求的类型(例如%d %f)和 ...

额 好神奇 好多看不懂得。。。不过还是谢谢了
6#
 楼主| 发表于 2013-3-21 14:47:30 | 只看该作者
rosynirvana 发表于 2013-3-7 21:30
就是说你输入一个小数,计算机仍然会当作一个整数读取
scanf是个很麻烦的函数,要求的类型(例如%d %f)和 ...

额 好神奇 好多看不懂得。。。不过还是谢谢了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表