比如一个基于控制台的程序里面,设计了一个程序要求输入的是数字(比如355),但是如果输入的是字符比如(abc),应该怎么识别出来呢

解决方案 »

  1.   

    isalpha returns a nonzero value if c is within the ranges A – Z or a – z.
      

  2.   

    char ch = getchar();
    if (ch <= '9' && ch >= '0')
        ... // numbers
    else if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A'))
        ... // letters
      

  3.   

    我是说,比如这样
              unsigned int seed;
               printf("请输入密码(0~10000):\n");
      scanf("%d",&seed);
    但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的 
    楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
      

  4.   

    你可以先定义成一个数组之类的,然后转换成Int.这样不行可以想其它办法来解决嘛!
      

  5.   

    用scanf结合sscanf不就行了?你scanf的调用改成这样
    char buf[12];
    int val = 0;//反正你只要整数……
    scanf("%[0-9]", buf);
    sscanf(buf, "%d", &val);这样的话val里面就保存了你要的值了……中间输入了其他的字母也不要紧,scanf会截断那些东西(不过下次调用scanf的时候会得到哪些东西
      

  6.   

    我是说,比如这样
              unsigned int seed;
               printf("请输入密码(0~10000):\n");
      scanf("%d",&seed);
    但是用户输入了一个字符串:12asdfdfg,有那么多字母呢,我定义的又不是数组,怎么检验不是数字呢,大家看到,前两个是数字,检到不是数字就报错,肯定要一个一个检验的 
    楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
    ------------------------------------------------------------------
    像这种情况,scanf碰到字母a时就认为前面的数字结束了,那么传给seed的值就是12.
      

  7.   

    >          unsigned int seed;
    >          printf("请输入密码(0~10000):\n");
    >          scanf("%d",&seed);你确定过执行结果没?指定了%d,应该会自动忽略字符输入的。
    >楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
    我的办法是按字符输入啊,大不了做个循环,一个一个检查。
      

  8.   

    我觉得还是2楼的好用,char ch = getchar();每次从键盘上得到一个字符,判断后再用。用
    while 循环,判断,等判断到回车  结束while。碰到输入非数字。立刻提示,输入有误
      

  9.   

    回复人: newbiestar() ( ) 信誉:100  2005-07-05 09:32:00  得分: 0  
     
     
       楼上搞错了吧?否则就不要%[0-9]存在了,而且默认的分割符也没必要了
    -------------------------------------------------------------------
    呵呵!没搞错。因为程序告诉scanf函数需要输入的是%d,所以会忽略字母。试试就知道了。回复人: pomelowu(羽战士) ( ) 信誉:150  2005-07-05 09:33:00  得分: 0 
    >楼上的只对用户只输入了一个字符的情况适用,那用户输入那么多字符,怎么办
    我的办法是按字符输入啊,大不了做个循环,一个一个检查。
    ---------------------------------
    确实如你所说,所以我是对于用scanf的这种情况下。
      

  10.   

    char ch = getchar();
    if (ch <= '9' && ch >= '0')
        ... // numbers
    else if ((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch >= 'A'))
        ... // letters
      

  11.   

    unsigned int seed;
        printf("请输入密码(0~10000):\n");
        scanf("%d",&seed);
    我在vc6.0上跟了一下,发现当碰到第一个非数字的时候就断 了,比如输入123aw3  结果是123因为a是字符  不接收。
      

  12.   

    在shlwapi.h中,有几个函数StrToInt、StrToIntEx等可以根据转换成功与否返回不同的值。楼主可以在msdn中查看这几个函数。
      

  13.   

    我试了一下,输入yyyy,结果把seed打印出来是负的seed=-8589993460,不知道什么东西,反正后面的程序就跟着出错了的
      

  14.   

    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);
    怎么回事呢
      

  15.   

    会不会是在XP系统下的原因啊,在MSDN上说atoi <stdlib.h> ANSI, Win 95, Win NT ,恐怕atoi是不能用了
      

  16.   

    你修改以后的程序问题太多:
               char *seedchar;
                          /// 声明了一个指针,却什么都没指向
               unsigned int seed;
               printf("请输入密码(0~10000):\n");
      scanf("%d",&seedchar);
                          /// %d是按整形输入,这一步执行的结果是改变了
                          /// seedchar这个指针保存的地址
      seed=atoi(seedchar);
                          /// 试图访问seedchar指向的内容。但是这个地址实际上
                          /// 是你输入的密码,也就是说地址是无效的,当然会出错
      

  17.   

    沒有啦 可能是你用的MSDN比較古老 那時候XP還沒發佈
      

  18.   

    atoi还是不能解决问题,如果一开始就输入的是字母,程序就出错了,看来还是要检测一下比较好,谁有简单好用的办法呢