Я искал это довольно долго, прежде чем публиковать этот вопрос. Ответ на него должен быть довольно легким, поскольку, поскольку я ультра-начинающий атм.
У меня есть char*
в котором я хочу, чтобы пользователь поставил несколько цифр (более 20), которые, в свою очередь, могут быть вызваны специально.
Это то, что я пробовал:
char* digits = GetString();
int prime = digits[0];
Когда я проверяю, работает ли это с printf, я считаю, что значение prime равно 0.
printf("prime:%d\ndigits:%c\n",prime, digits[0]);
Почему это было бы и что я мог сделать, чтобы сделать эту работу?
Изменение: возможно, проще сделать массив int и использовать GetLongLong?
Ни C, ни C++ не гарантируют, какое значение будет использовано для кодирования символа 0
, но оба гарантируют, что цифры будут смежными и упорядоченными, поэтому (например) digits[0]-48
могут работать или не работать, но digits[0] - '0'
гарантированно работает (предполагая, что digits[0]
фактически содержат цифру, конечно).
Точное требование в стандарте C++ (§2.3/3):
В базовых наборах исходного и исполняемого символов значение каждого символа после 0 в приведенном выше списке десятичных цифр должно быть больше, чем значение предыдущего.
По крайней мере, с C99, стандарт C имеет идентичную формулировку, но в п. 5.2.1/3.
Нулевой символ ('0') имеет числовое значение 48, '1' равно 49 и так далее.
Вы можете найти эту полезную идиому, чтобы получить числовое значение из значения ascii.
int prime = digits[0] - '0';
Вы также можете найти информацию о человеке ascii informative (или подобную страницу руководства, если вы используете какую-либо другую кодировку).
man ascii
не показывает ничего, попробуйте man ebcdic
.