c语言中如何判断输入的是字符还是数字

比如我输入的1212a,怎样在屏幕上显示我输入了1个数而不是俩?... 比如我输入的12 12a,怎样在屏幕上显示我输入了1个数而不是俩? 展开
 我来答
splashchaos
2014-10-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3342
采纳率:0%
帮助的人:3498万
展开全部

这个看着简单的问题,其实涉及的东西不少。由于种种原因, c的输入部分,如scanf等,安全问题很大, 所以如果可能,就如前面有人建议的那样,把用户输入当字符串一起读入,然后自己处理。下面的代码用fgets读入全部输入,然后用strtok分割,对分割后的字符串再做是否数字串的检查。(注:有人认为strtok不安全,其实不一定,要看如何使用,如果可能采用支持新的C11的安全库xx_s结尾的,或自己写,或采用第3方开源的库都是可以的)。下面是一个完整的例子:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h> 

#define MAX_INPUT 1024

int isNumString(const char *s);

int main(int argc, char** argv) 
{
    char line[MAX_INPUT];
    char tokens[] = " .,-|:;#";
    char *pch;
    size_t count_numstring;
    
    printf("Enter strings, Enter to continue, CTRL-C to exit.\n");
    while (fgets(line, MAX_INPUT, stdin) != NULL) {
          /* get ride of the carriage return */         
          if (line[strlen(line)-1] == '\n')
             line[strlen(line)-1] = '\0';        
          
          /* slice input string and valid them against numeric. */
          count_numstring = 0;          
          pch = strtok(line, tokens); /* if possible, using strtok_s() instead.*/
          while (pch != NULL) {
                if (isNumString(pch))
                   count_numstring ++;
                pch = strtok(NULL, tokens);                
          }
          printf("Numeric string number: %d\n", count_numstring);          
    }
    
    return 0;
}

int isNumString(const char* s)
{   
   int i, retcode = 1;
   
   for (i = 0; i < strlen(s); i++ )
   {
       if (!isdigit(s[i]))
       {
           retcode = 0;
           break;
       }
   }   
   return retcode;   
}

运行结果:

Enter strings, Enter to continue, CTRL-C to exit.
1 2 3
Numeric string number: 3
1,2s.3 | 4 # 5
Numeric string number: 4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2014-10-15 · TA获得超过8600个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3199万
展开全部
首先当作字符逐个读入字符串字符串中,读到分隔符(如白字符,逗号等)后,判断这个字符串中各个字符是否满足条件即可(0 -- 9为十进制数,含有abcdef或ABCDEF则为十六进制数)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
icecoobe
2014-10-15 · TA获得超过1988个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1055万
展开全部
这个要看你的代码是怎么处理输入的

比如
int a = 0;
scanf("%d", &a);
这就只能接收一个整数输入
------------
最好贴出你的代码,也许你提出的问题不是你真正面对的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
茵苗教育探索
2019-07-12 · TA获得超过3797个赞
知道大有可为答主
回答量:3053
采纳率:34%
帮助的人:171万
展开全部
额。。。我刚才试着输入了hello
word。。。然后回车后,,,就像我前面所说的一样:输出结果是0.000000,然后程序运行时间超长,运行完之后电脑也比较卡了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
摩绿善成礼
2019-06-01 · TA获得超过3596个赞
知道大有可为答主
回答量:3117
采纳率:29%
帮助的人:353万
展开全部
puts(\"请输入数据数N\");scanf(\"%d\",&n);这一句你不已经规定只能输入数字了吗
难道能输入helllo
world
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式