13个回答
展开全部
这个看着简单的问题,其实涉及的东西不少。由于种种原因, 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先当作字符逐个读入字符串字符串中,读到分隔符(如白字符,逗号等)后,判断这个字符串中各个字符是否满足条件即可(0 -- 9为十进制数,含有abcdef或ABCDEF则为十六进制数)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个要看你的代码是怎么处理输入的
比如
int a = 0;
scanf("%d", &a);
这就只能接收一个整数输入
------------
最好贴出你的代码,也许你提出的问题不是你真正面对的问题。
比如
int a = 0;
scanf("%d", &a);
这就只能接收一个整数输入
------------
最好贴出你的代码,也许你提出的问题不是你真正面对的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额。。。我刚才试着输入了hello
word。。。然后回车后,,,就像我前面所说的一样:输出结果是0.000000,然后程序运行时间超长,运行完之后电脑也比较卡了。。。
word。。。然后回车后,,,就像我前面所说的一样:输出结果是0.000000,然后程序运行时间超长,运行完之后电脑也比较卡了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
puts(\"请输入数据数N\");scanf(\"%d\",&n);这一句你不已经规定只能输入数字了吗
难道能输入helllo
world
难道能输入helllo
world
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询