我想了解如何验证字符串输入并检查输入的字符串是否为数字?我相信isdigit()函数是正确的方法,但我可以尝试使用一个字符串,但是当它涉及一个字符串时,该功能并没有帮助我。这就是我所拥有的到目前为止,请指导我验证一个完整的字符串,如
char * Var1 =" 12345"和char * var2 =" abcd"
#include <stdio.h>
#include <ctype.h>
int main()
{
char *var1 = "hello";
char *var2 = "12345";
if( isdigit(var1) )
{
printf("var1 = |%s| is a digit\n", var1 );
}
else
{
printf("var1 = |%s| is not a digit\n", var1 );
}
if( isdigit(var2) )
{
printf("var2 = |%s| is a digit\n", var2 );
}
else
{
printf("var2 = |%s| is not a digit\n", var2 );
}
return(0);
}
当声明和初始化变量时,程序似乎工作正常,
int var1 =&#39; h&#39 ;; int var2 =&#39; 2&#39 ;;
但我想了解如何验证完整的字符串,如* var =&#34; 12345&#34 ;;
答案 0 :(得分:1)
尝试在每个字符串上创建一个循环并单独验证每个char
答案 1 :(得分:1)
isdigit
需要一个char
,而不是char*
。如果要使用isdigit
,请添加循环以进行检查。由于您计划在多个地方使用它,因此将其转换为函数,如下所示:
int all_digits(const char* str) {
while (*str) {
if (!isdigit(*str++)) {
return 0;
}
}
return 1;
}
当到达字符串的null终结符而没有在中间点击return
语句时,换句话说,当所有字符都通过isdigit
测试时,上面的循环将结束。
请注意,传递all_digits
不意味着该字符串表示任何支持的数字类型的值,因为不考虑字符串的长度。因此,all_digits
会返回一长串数字,但如果您尝试将其转换为int
或long long
,则会出现溢出。
答案 2 :(得分:0)
使用此
int isNumber(const char *const text)
{
char *endptr;
if (text == NULL)
return 0;
strtol(text, &endptr, 10);
return (*endptr == '\0');
}
然后
if (isNumeric(var1) == 0)
printf("%s is NOT a number\n", var1);
else
printf("%s is number\n", var1);
strtol()
函数将忽略前导空格字符。
如果找到无法转换的字符,转换将停止,并且endptr
将在返回后指向该字符,因此检查*endptr == '\0'
将告诉您是否在该字符的末尾字符串,表示成功转换的所有字符。
如果您想将前导空格也视为无效字符,那么您可以改为编写
int isNumber(const char *text)
{
char *endptr;
if (text == NULL)
return 0;
while ((*text != '\0') && (isspace(*text) != 0))
text++;
if (*text == '\0')
return 0;
strtol(text, &endptr, 10);
return (*endptr == '\0');
}
取决于你需要什么,但跳过领先的空白字符就是将数字解释为人类正在阅读它们,因为人类&#34;不会看到&#34; 空白字符。