免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8175 | 回复: 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 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-12-30 20:35 |只看该作者
用%s接收,
然后用strtod之类的函数转换。
检查转换是否完全,具体man strtod
如果有问题,再循环接收。

论坛徽章:
0
3 [报告]
发表于 2006-12-30 20:38 |只看该作者
原帖由 lenovo 于 2006-12-30 20:35 发表
用%s接收,
然后用strtod之类的函数转换。
检查转换是否完全,具体man strtod
如果有问题,再循环接收。


非常感谢你的回复
我只是想做一个判断
假如输入的是int类型 继续执行下面语句
如果不是提示用户输入错误
返回 要求用户重新输入

你知道如何实现吗?
我苦思不得其解

论坛徽章:
0
4 [报告]
发表于 2006-12-30 20:48 |只看该作者
自己写函数吧。

论坛徽章:
0
5 [报告]
发表于 2006-12-30 21:22 |只看该作者
也可以这样实现:
  1.   int n;
  2.   int ret;

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

  8.   /* 执行这一段函数 */
复制代码

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2006-12-30 21:43 |只看该作者
检查返回值

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2006-12-30 21:45 |只看该作者
scanf的返回值

论坛徽章:
0
8 [报告]
发表于 2006-12-30 21:50 |只看该作者
非常感谢楼上的朋友
帮我解决了这个问题

下面我将我的这个例子打出来,供大家参考
其中应用到了whyglinux
提供的这个算法





  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4. #define NULL 0
  5. struct list                      /*定义顺序表存储结构*/
  6. {int data_list[MAX];
  7. int last;
  8. };
  9. typedef struct list LIST;

  10. LIST createlist(void)           /*创建顺序表*/
  11. {LIST sqlist;
  12. int i,x,ret;
  13. printf("\n****此步操作为输入顺序表的长度******************** ");
  14. printf("\n****注意如果你输入的为非int类型,将自动重新输入****\n");
  15. do {
  16.     printf("在这里输入长度---->>> " );
  17.     ret = scanf( "%d", &sqlist.last );
  18.     while ( getchar() != '\n' );
  19.   } while ( ret != 1 );

  20. fflush(stdin);
  21. printf("\n↓请输入顺序表的数据<int型>↓\n");
  22. for(i=1;i<=sqlist.last;i++)
  23. {printf("输入第%d个数据:",i);
  24.   scanf("%d",&x);
  25.   sqlist.data_list[i]=x;
  26. }
  27.   return(sqlist);
  28. }


  29. void outlist(LIST l)           /*输出顺序表*/
  30. {int i;
  31.   printf("\n顺序表的长度:%d\n",l.last);
  32.   printf("顺序表的数据:");
  33.   for(i=1;i<=l.last;i++)
  34.   printf("%d   ",l.data_list[i]);
  35.   printf("\n");
  36. }

  37.   LIST inslist(LIST l,int i,int x)   /*顺序表插入 i表示插入位置 x表示插入的数据*/
  38. {int j;
  39.   if(l.last>MAX)
  40.   {printf("\n顺序表已满!!\n");
  41.   return(l);}
  42.   else if(i<1||i>l.last)
  43.   {printf("\n插入的位置出错!!\n");
  44.   return(l);}
  45.   else{
  46.   for(j=l.last;j>=i;j--)
  47.    l.data_list[j+1]=l.data_list[j];
  48.   l.data_list[i]=x;
  49.   l.last++;
  50.   return(l);}
  51. }

  52. LIST delist(LIST l,int i)          /*顺序表删除 i表示删除位置*/
  53. {int j;
  54. if(i<1||i>l.last)
  55. {printf("\n删除出错!!\n");
  56. return(l);}
  57.   else
  58.   {for(j=i+1;j<=l.last;j++)
  59. l.data_list[j-1]=l.data_list[j];
  60. l.last--;
  61. return(l);}
  62. }


  63. void main()                   /*实验一:顺序表的基本运算*/
  64. { LIST a;
  65. int i,x,j;
  66. a=createlist();
  67. outlist(a);
  68. printf("\n请输入插入位置:");
  69. scanf("%d",&i);
  70. printf("\n请输入插入数据:");
  71. scanf("%d",&x);
  72. a=inslist(a,i,x);
  73. outlist(a);
  74. printf("\n请输入删除数据的位置:");
  75. scanf("%d",&j);
  76. a=delist(a,j);
  77. outlist(a);
  78. }


复制代码

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

论坛徽章:
0
9 [报告]
发表于 2006-12-30 22:11 |只看该作者

不知道你是什么平台,

我在sun solaris9(sparc)平台下,试过,用判断长度的办法来实现,char长度是1个字节,int是4个字节。这样就可以判断出来了。
   printf("size of char:%d\n",sizeof(char));
     printf("size of int:%d\n",sizeof(int));

   size of char:1
     size of int:4,
   当然这个方法可能不适合其它的平台。

论坛徽章:
0
10 [报告]
发表于 2006-12-30 22:29 |只看该作者
注意:C 标准没有规定 fflush(stdin); 的行为,所以在 Linux 等平台下其行为可能是没有定义的。为了保证程序的移植性,最好不要使用 fflush(stdin);,而应该用其它方式实现对输入缓冲的清除。比如我上面提到的 while ( getchar() != '\n' );  这种方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP