0

我试图在一个简单的 C 应用程序中将输入限制为仅数字,但是我收到了警告。我怀疑这与以下部分有关。第一版是正确的做事方式吗?谢谢。

    for(i=0;i< strlen(string); i++)
{
    if( string[i]<"0" || string[i]>"9")
        valid= FALSE;
}

或者

    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);
}

为了澄清,我必须根据我正在做的练习以给出的方式进行检查。谢谢。

4

2 回答 2

1

第一版是完全错误的。它会进行指针比较,因为字符串文字会衰减为指针,而字符会提升为int.

版本二很接近,尽管你真的应该使用isdigitfrom <ctype.h>

顺便说一句,您是否知道i < strlen(string)在循环终止条件中将线性时间算法转换为二次时间算法?

于 2011-11-05T19:18:51.913 回答
0

你不能只使用if (scanf ("%d", &n)==1)或打电话strtol吗?

于 2011-11-05T19:23:16.747 回答