请您检查此功能有什么问题?此函数检查字符串是否为数字。如果它是数字(允许正整数和负整数),则返回值1.否则,它返回0.我试图运行代码,输出总是返回0.
{int is_valid (char strval[])
{
int strlen, ascii_code, i;
int decimal=-1, negative=-1;
strlen=strlen_safe(strval);
for (i=0; i<strlen; i++)
{
ascii_code=(int)strval[i];
if(ascii_code==44)
return 0;
else if(ascii_code==45)
{
negative++;
if(negative||i!=0)
return 0;
}
else if(ascii_code==46)
{
decimal++;
if(decimal>0)
return 0;
}
else if(ascii_code<48||ascii_code>57)
return 0;
}
return 1;
}
答案 0 :(得分:0)
如果您检查字符串是当前平台上的数字(可能不使用ASCII作为其编码),那么您应该使用strtod()
。它将处理浮点数可以格式化的所有微妙方式,并且通常对用户来说更好:
#include <stdlib.h>
int is_valid_number(const char *s, size_t maxdigits)
{
char *endp;
strtod(s, &endp);
const size_t digits = (size_t) (endp - s);
return *endp == '\0' && digits <= maxdigits;
}
以上是非常保守的,它要求传入字符串的所有字符都是数字的一部分。这意味着"43 "
(注意尾随空格)将被拒绝。
要使其仅接受前缀,请将最后一行更改为
return endp != s;
答案 1 :(得分:0)
您不需要将strval[i]
转换为int
。
如果'-'
不出现在字符串的开头,它仍会将字符串视为数字。
如果strlen_safe
是您自己的函数,则可能是代码失败的地方。
此代码应该有效。
int is_valid (char strval[])
{
if(!*strval)
return 0;
if(*strval=='-')
strval++;
char decimal=0;
while(*strval)
{
if(!isdigit(*strval))
{
if(*strval=='.')
{
if(decimal)
return 0;
decimal=1;
}
else
return 0;
}
strval++;
}
return 1;
}