Функция Atoi не конвертирует буквы должным образом - PullRequest
0 голосов
/ 09 февраля 2020
 printf("Enter a number or type 'Exit' to exit\n");

    long val = 0;
    int y = 3;

    scanf("%s", input);

    val = atoi(input); 


    if (val < y) {

       printf("Hey You!");

    }
    else {
        printf("Error, no such cell exists.\n");
    }

Когда пользователь вводит «0», «1» или «2», выводится «Привет, ты». Тем не менее, когда пользователь вводит любую букву, такую ​​как «y» или «k», тогда также выводится «Hey You». Как сделать так, чтобы «Привет, ты!» Печатался только для значений ниже 3 (то есть у).

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Из C стандарта

Если значение результата не может быть представлено, поведение не определено.

Может быть возвращено любое значение. В вашем случае это значение ниже 3. Но это не гарантируется.

atoi не возвращает никакого специального значения или не устанавливает никакой переменной ошибки, если преобразование не может быть выполнено

0 голосов
/ 09 февраля 2020

Где вы определили input? Вы уже выделили память для строки, которая будет сохранена? Если нет, вы можете получить ошибку сегментации или atoi может вернуть 0.

Согласно документации на atoi (https://en.cppreference.com/w/cpp/string/byte/atoi), если у вас есть дополнительные -значные символы в строке, он будет игнорировать их, а если их нет, он вернет 0.

...