如果要求输入int类型变量,但是输入了字符,怎么识别 比如一个基于控制台的程序里面,设计了一个程序要求输入的是数字(比如355),但是如果输入的是字符比如(abc),应该怎么识别出来呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 isalpha returns a nonzero value if c is within the ranges A – Z or a – z. char ch = getchar();if (ch <= '9' && ch >= '0') ... // numberselse if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A')) ... // letters 我是说,比如这样 unsigned int seed; printf("请输入密码(0~10000):\n"); scanf("%d",&seed);但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的 楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办 你可以先定义成一个数组之类的,然后转换成Int.这样不行可以想其它办法来解决嘛! 用scanf结合sscanf不就行了?你scanf的调用改成这样char buf[12];int val = 0;//反正你只要整数……scanf("%[0-9]", buf);sscanf(buf, "%d", &val);这样的话val里面就保存了你要的值了……中间输入了其他的字母也不要紧,scanf会截断那些东西(不过下次调用scanf的时候会得到哪些东西 我是说,比如这样 unsigned int seed; printf("请输入密码(0~10000):\n"); scanf("%d",&seed);但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的 楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办------------------------------------------------------------------像这种情况,scanf碰到字母a时就认为前面的数字结束了,那么传给seed的值就是12. > unsigned int seed;> printf("请输入密码(0~10000):\n");> scanf("%d",&seed);你确定过执行结果没?指定了%d,应该会自动忽略字符输入的。>楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办我的办法是按字符输入啊,大不了做个循环,一个一个检查。 我觉得还是2楼的好用,char ch = getchar();每次从键盘上得到一个字符,判断后再用。用while 循环,判断,等判断到回车 结束while。碰到输入非数字。立刻提示,输入有误 回复人: newbiestar() ( ) 信誉:100 2005-07-05 09:32:00 得分: 0 楼上搞错了吧?否则就不要%[0-9]存在了,而且默认的分割符也没必要了-------------------------------------------------------------------呵呵!没搞错。因为程序告诉scanf函数需要输入的是%d,所以会忽略字母。试试就知道了。回复人: pomelowu(羽战士) ( ) 信誉:150 2005-07-05 09:33:00 得分: 0 >楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办我的办法是按字符输入啊,大不了做个循环,一个一个检查。---------------------------------确实如你所说,所以我是对于用scanf的这种情况下。 char ch = getchar();if (ch <= '9' && ch >= '0') ... // numberselse if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A')) ... // letters unsigned int seed; printf("请输入密码(0~10000):\n"); scanf("%d",&seed);我在vc6.0上跟了一下,发现当碰到第一个非数字的时候就断 了,比如输入123aw3 结果是123因为a是字符 不接收。 在shlwapi.h中,有几个函数StrToInt、StrToIntEx等可以根据转换成功与否返回不同的值。楼主可以在msdn中查看这几个函数。 我试了一下,输入yyyy,结果把seed打印出来是负的seed=-8589993460,不知道什么东西,反正后面的程序就跟着出错了的 char *seedchar; unsigned int seed; printf("请输入密码(0~10000):\n"); scanf("%d",&seedchar); seed=atoi(seedchar);//执行到这步的时候出错了,提示:unhandled exception in **.exe:OxC0000005:accesse violation printf("seed=%d\n",seed);怎么回事呢 会不会是在XP系统下的原因啊,在MSDN上说atoi <stdlib.h> ANSI, Win 95, Win NT ,恐怕atoi是不能用了 你修改以后的程序问题太多: char *seedchar; /// 声明了一个指针,却什么都没指向 unsigned int seed; printf("请输入密码(0~10000):\n"); scanf("%d",&seedchar); /// %d是按整形输入,这一步执行的结果是改变了 /// seedchar这个指针保存的地址 seed=atoi(seedchar); /// 试图访问seedchar指向的内容。但是这个地址实际上 /// 是你输入的密码,也就是说地址是无效的,当然会出错 沒有啦 可能是你用的MSDN比較古老 那時候XP還沒發佈 atoi还是不能解决问题,如果一开始就输入的是字母,程序就出错了,看来还是要检测一下比较好,谁有简单好用的办法呢 高分,高分啦,急求unicode程序编译配置问题 如何 在一个网络聊天程序中,时事监控对方的屏幕?????(用vc开发) 问:程序从debug版本转到Release版本要作些什么工作? 关于STL的警告信息 这段程序问题出在哪儿? VC调试问题??? 有谁精通位图的请帮忙看看这个程序。 滑块如何实现选择范围 可以变蓝变宽的那种 谢谢 急用 给分大大地 WaitForSingleObject第二个参数是0时后面代码还会执行吗 求高手:CDHtmlDialog加载成功判断 请教vc中的时间处理 怎样获得“程序”的目录路径?
if (ch <= '9' && ch >= '0')
... // numbers
else if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A'))
... // letters
unsigned int seed;
printf("请输入密码(0~10000):\n");
scanf("%d",&seed);
但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的
楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
char buf[12];
int val = 0;//反正你只要整数……
scanf("%[0-9]", buf);
sscanf(buf, "%d", &val);这样的话val里面就保存了你要的值了……中间输入了其他的字母也不要紧,scanf会截断那些东西(不过下次调用scanf的时候会得到哪些东西
unsigned int seed;
printf("请输入密码(0~10000):\n");
scanf("%d",&seed);
但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的
楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
------------------------------------------------------------------
像这种情况,scanf碰到字母a时就认为前面的数字结束了,那么传给seed的值就是12.
> printf("请输入密码(0~10000):\n");
> scanf("%d",&seed);你确定过执行结果没?指定了%d,应该会自动忽略字符输入的。
>楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
我的办法是按字符输入啊,大不了做个循环,一个一个检查。
while 循环,判断,等判断到回车 结束while。碰到输入非数字。立刻提示,输入有误
楼上搞错了吧?否则就不要%[0-9]存在了,而且默认的分割符也没必要了
-------------------------------------------------------------------
呵呵!没搞错。因为程序告诉scanf函数需要输入的是%d,所以会忽略字母。试试就知道了。回复人: pomelowu(羽战士) ( ) 信誉:150 2005-07-05 09:33:00 得分: 0
>楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
我的办法是按字符输入啊,大不了做个循环,一个一个检查。
---------------------------------
确实如你所说,所以我是对于用scanf的这种情况下。
if (ch <= '9' && ch >= '0')
... // numbers
else if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A'))
... // letters
printf("请输入密码(0~10000):\n");
scanf("%d",&seed);
我在vc6.0上跟了一下,发现当碰到第一个非数字的时候就断 了,比如输入123aw3 结果是123因为a是字符 不接收。
unsigned int seed;
printf("请输入密码(0~10000):\n");
scanf("%d",&seedchar);
seed=atoi(seedchar);//执行到这步的时候出错了,提示:unhandled exception in
**.exe:OxC0000005:accesse violation
printf("seed=%d\n",seed);
怎么回事呢
char *seedchar;
/// 声明了一个指针,却什么都没指向
unsigned int seed;
printf("请输入密码(0~10000):\n");
scanf("%d",&seedchar);
/// %d是按整形输入,这一步执行的结果是改变了
/// seedchar这个指针保存的地址
seed=atoi(seedchar);
/// 试图访问seedchar指向的内容。但是这个地址实际上
/// 是你输入的密码,也就是说地址是无效的,当然会出错