I'm trying to restrict the input to only numerics in a simple C application however I get a warning. I suspect it's to do with the following segment. Is version one the proper way of doing things? Thanks.
for(i=0;i< strlen(string); i++)
{
if( string[i]<"0" || string[i]>"9")
valid= FALSE;
}
OR
for(i=0;i< strlen(string); i++)
{
if( string[i]<'0' || string[i]>'9')
valid= FALSE;
}
rest of my code is
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);
}
To clarify I have to do the check in the fashion given according to the exercise I'm doing. Thanks.
Version one is entirely wrong. It does pointer comparisons, because string literals decay to pointers and characters are promoted to
int
.Version two is close, though you should really use
isdigit
from<ctype.h>
.Btw., are you aware that
i < strlen(string)
in a loop termination condition turns linear-time algorithms into quadratic-time ones?