免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8180 | 回复: 19
打印 上一主题 下一主题

判断是int 还是char [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-30 20:29 |只看该作者 |正序浏览
我先说一下我的意思
我想在想做一判断
这里的n要求是输入int类型的
但是如果当用户输入了其他字符不是数字
那么该如何解决?




  1. aaa()
  2. {int n;
  3. scanf("%d",&n);
  4. if(n为int类型)
  5. {执行这一段函数}
  6. else
  7. {递归调用aaa()重新执行函数}
复制代码

[ 本帖最后由 jihuaneva 于 2006-12-30 20:46 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2007-10-18 02:18 |只看该作者
又学到知识了

论坛徽章:
0
19 [报告]
发表于 2007-10-17 21:43 |只看该作者

回复 #3 jihuaneva 的帖子

可以这样
aaa()
{int n;
n=getchar();
if(n>='0'&&n<='9')
{执行这一段函数}
else
{递归调用aaa()重新执行函数}
看行不

论坛徽章:
0
18 [报告]
发表于 2007-01-26 20:22 |只看该作者
原帖由 cymx2002 于 2007-1-26 12:13 发表
大家其实不用这么麻烦,man isdigit
楼主如果要判断多位数字,可以先放到一个数组里面,
然后再一位一位的判断是不是数字即可。


这样反而要更麻烦些。

论坛徽章:
0
17 [报告]
发表于 2007-01-26 12:38 |只看该作者
而且楼主帖子的标题就不对。
是不是数字和它的类型是没有关系的。
至少isdigit这个函数是这样的。
所以
aaa()
{int n;
scanf("%d",&n);
if(n为int类型)

应该为if(n为数字)!!
mtx99老兄用sizeof的方法,估计
是误解了楼主的本意了。

论坛徽章:
0
16 [报告]
发表于 2007-01-26 12:13 |只看该作者
大家其实不用这么麻烦,man isdigit
楼主如果要判断多位数字,可以先放到一个数组里面,
然后再一位一位的判断是不是数字即可。

论坛徽章:
0
15 [报告]
发表于 2007-01-26 09:59 |只看该作者
我知道大家讨论的是输入一个数字,但是我想输入一个两位以上的数,比如输入10,ok,输入1e,报错,怎么处理。

论坛徽章:
0
14 [报告]
发表于 2006-12-31 17:09 |只看该作者
给版主建议:
既然保留该贴,那应该改下标题,比如:“C中输入缓冲区的清空”,或者“C中输入错误处理”

论坛徽章:
0
13 [报告]
发表于 2006-12-31 12:51 |只看该作者
  1. 在这里我想解释一下whyglinux的这段程序

  2. int n;
  3.   int ret;

  4.   do {
  5.     printf( "Input an integer: " );
  6.     ret = scanf( "%d", &n );
  7.     while ( getchar() != '\n' ); /* Clear the input buffer */
  8.   } while ( ret != 1 );

  9.   /* 执行这一段函数 */

  10. 当用户如果输入一个数字的时候,那么这个时候n定义的是一个整型就将这个整型接收
  11. ret = scanf( "%d", &n );的意思不等于ret=n;
  12. 而是当n接收到一个整型值时候ret=1;
  13. while ( ret != 1 );跳出循环
  14. 如果当用户输入一个字符类型的数据,那么这个时候 n已定义为一个整型就无法接收了
  15. 所以n没有接收到值此时候ret=0;
  16. 而getchar正是来接受字符的,当用户输入了回车('\n')后接收完毕
  17. 跳出while ( getchar() != '\n' ); 注意这里的while 顺环体为空语句

  18. 这个时候while ( ret != 1 );(因为ret=0,条件为真继续执行该循环)
  19. 所以说如果你输入了一个非int类型
  20. 那么接下来的又会
  21. printf( "Input an integer: " );
  22. ret = scanf( "%d", &n );
  23. (直到输入为int类型止)
复制代码



如果我解释的有错误请大家指出来
也有可能该算法不止这些
还有其他功能
也希望大家能继续发挥
我应用到这个算法就是这样的


[ 本帖最后由 jihuaneva 于 2006-12-31 12:53 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2006-12-31 12:34 |只看该作者
原帖由 whyglinux 于 2006-12-30 22:29 发表
注意:C 标准没有规定 fflush(stdin); 的行为,所以在 Linux 等平台下其行为可能是没有定义的。为了保证程序的移植性,最好不要使用 fflush(stdin);,而应该用其它方式实现对输入缓冲的清除。比如我上面提到的 wh ...



感谢 whyglinux

我的这个程序是在VC下面做的
你提供的那个算法
我应用在
当要求用户输入一个表长(int类型)
但是如果用户要是误操作了
输入了一个非int类型
那么要求用户重新输入
之前输入的那个非int类型无效
然后重新输入
在将这个重新输入的int类型
付给 sqlist.last
然后继续执行

不过这个算法确实很好
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP