Преобразуйте тип 'char' в 'int' и сохраните данные на языке Си - PullRequest
1 голос
/ 30 января 2012

В настоящее время я учусь в колледже по основам программирования, который занимается языком программирования Си.Одно из заданий, которое у меня есть, - создать программу, которая создает случайное число от 1 до 10 и заставляет пользователя угадывать число.Проблема, с которой я сталкиваюсь, заключается в том, что я должен использовать функцию isdigit(), чтобы проверить, что предположение является числом.Я использовал

scanf("%c", &userChar);

для хранения аргумента, чтобы проверить, что предположение является цифрой, следующим образом:

if isdigit(userChar)

Однако я хочу проверить, чтобы убедиться, что числомежду 1 и 10 путем преобразования userChar в переменную int для проверки следующим образом:

if (userNum >= 1 && userNum <= 10)

Я еще не научился делать это, поэтому я надеялся, что кто-то с этого сайта сможет мне помочь,Кроме того, мне нужно, чтобы проверить, угадал ли пользователь правильный номер.Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 30 января 2012

В C тип char является целочисленным, и вы можете выполнять с ним арифметические операции. Вы можете конвертировать между различными целочисленными типами, используя приведение типов - имя типа в (), например для преобразования char userChar в long вы можете написать (long)userChar. Однако в целочисленных выражениях типы, меньшие int, повышаются до int, поэтому вам не понадобится приведение для преобразования char в int.

Последнее, что вам нужно знать, это то, что каким бы ни был целочисленный эквивалент символа '1' (фактическое значение неважно), он на 1 больше, чем целочисленный эквивалент для 0; другими словами, символы '0', '1', ..., '9' представлены непрерывным диапазоном целых чисел (то же самое верно для 'a', 'b', ..., 'z' и 'A', 'B', ..., 'Z').

Поэтому, если вы знаете, что char является цифрой (например, потому что вы использовали isdigit()), вы получите его целочисленный эквивалент, используя:

int intValue = userChar - '0'; 
1 голос
/ 30 января 2012

Поскольку 10 не могут быть сохранены в одном символе, вам нужно либо использовать две цифры, либо попросить пользователя угадать число от 0 до 9 включительно.

Чтобы сделать int из однозначного символа, используйте этот фрагмент кода:

int digitVal = charDigit - '0';

Это работает, потому что цифры от 0 до 9 расположены рядом друг с другом в кодировке ASCII: код для 1 равен коду для 0 плюс один; код для 2 равен коду для 0 плюс два и так далее. Поэтому, когда вы вычитаете код 0 (который обозначен как '0' в C) из однозначного символа, вы получаете целочисленное значение соответствующей цифры.

0 голосов
/ 30 января 2012

Таким образом, вам нужно принять введенное пользователем целое число, которое может быть в диапазоне от 1 до 10.

Вы можете прочитать один символ за раз и вычислить значение; например, если пользователь вводит '1', а затем '0', вам необходимо вычислить целочисленное значение 10 из этих двух символов. У вас должно быть достаточно информации, чтобы сделать это.

Но обычный способ сделать это - использовать библиотечную функцию для непосредственного считывания значения (но см. Ниже) в объект int. (Подсказки: scanf, "%d"; прочитайте вашу документацию.) При таком подходе все вычисления выполняются соответствующей библиотечной функцией, и вам не нужно вызывать isdigit() самостоятельно.

Библиотечные функции, такие как scanf, определены для работы, по сути, путем многократного вызова getchar(), чтения отдельных символов и некоторого сбора необходимой информации. Вы можете выполнить всю эту работу самостоятельно или позволить scanf сделать это за вас. Что вы должны сделать, зависит от точных требований вашего задания; если цель задания - выяснить, как делать то, что делает scanf, то, конечно, просто вызов scanf не будет приемлемым.

0 голосов
/ 30 января 2012

Цифры в C - это «0», «1», ..., «9», и они являются последовательными.char s просто малы int s, поэтому userChar - '0' (при условии, что userChar имеет char со значением от '0' до '9') имеет значение от 0 до 9.

Вы можете использовать это для проверки ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...