C仅输入小数
在一个简单的C应用程序中,我试图将输入限制为仅数字,但是我得到了一个警告。我怀疑这与以下部分有关。第一版是正确的做事方式吗?谢谢C仅输入小数,c,string,input,numerics,C,String,Input,Numerics,在一个简单的C应用程序中,我试图将输入限制为仅数字,但是我得到了一个警告。我怀疑这与以下部分有关。第一版是正确的做事方式吗?谢谢 for(i=0;i< strlen(string); i++) { if( string[i]<"0" || string[i]>"9") valid= FALSE; } 为了澄清,我必须按照我正在做的练习给出的方式进行检查。谢谢 第一版完全错误。它进行指针比较,因为字符串文字会衰减为指针,而字符会提升为int 第二
for(i=0;i< strlen(string); i++)
{
if( string[i]<"0" || string[i]>"9")
valid= FALSE;
}
为了澄清,我必须按照我正在做的练习给出的方式进行检查。谢谢 第一版完全错误。它进行指针比较,因为字符串文字会衰减为指针,而字符会提升为
int
第二版很接近了,不过您应该真正使用
中的isdigit
顺便说一句,你知道循环终止条件中的
i
会将线性时间算法转换为二次时间算法吗?你不能只使用如果(scanf(“%d”)、&n)==1
或调用strtol
?第二个是(更多)正确的。所以。。。你不想检查小数点吗?谢谢你给我的练习,我们必须使用这种方法。但我似乎找不到我的朋友error@MarioPen:那么,使用第二个选项(或isdigit
)能解决问题吗?strtol
会起作用,但sscanf
不会等效。例如,他的代码说1a
无效,但是sscanf
仍然会将1转换为一个数字,因此它会返回1。我故意写了scanf
,假设他是从stdin
读取的
for(i=0;i< strlen(string); i++)
{
if( string[i]<'0' || string[i]>'9')
valid= FALSE;
}
void main()
{
char number[4];
printf("Please enter a decimal number: ");
gets(number);
if (numeric(number))
printf("'%s' is a valid number\n", number);
else
printf("'%s' is an invalid number\n", number);
}