C Ввод только десятичных дробей - PullRequest
0 голосов
/ 05 ноября 2011

Я пытаюсь ограничить ввод только цифрами в простом 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);
}

Чтобы уточнить, я должен выполнить проверку в порядке, указанном в упражнении I'я делаю.Благодарю.

Ответы [ 2 ]

1 голос
/ 05 ноября 2011

Первая версия совершенно неверна.Он выполняет сравнение указателей, потому что строковые литералы затухают до указателей, а символы переводятся в int.

Вторая версия близка, хотя вам действительно следует использовать isdigit из <ctype.h>.

Кстати, знаете ли вы, что i < strlen(string) в состоянии завершения цикла превращает алгоритмы с линейным временем в алгоритмы с квадратичным временем?

0 голосов
/ 05 ноября 2011

Разве вы не можете просто использовать if (scanf ("%d", &n)==1) или позвонить strtol?

...