在发布这个问题之前,我已经搜索了很长时间了。答案应该相当容易,因为我是一个超初学者。
我有一个char*
,我希望用户输入一些数字(超过20个),然后可以专门调用。
这是我尝试过的:
char* digits = GetString();
int prime = digits[0];
当我验证这是否适用于printf时,我发现素数已经变为0。
printf("prime:%d\ndigits:%c\n",prime, digits[0]);
为什么会这样,我该怎么做才能使这项工作?
编辑:制作一个int数组并使用GetLongLong可能更容易吗?
答案 0 :(得分:5)
C或C ++都不保证将使用什么值来对字符0
进行编码,但两者都保证数字是连续的和有序的,因此(例如)digits[0]-48
可能有效,也可能无效,但是digits[0] - '0'
保证可以正常工作(假设digits[0]
实际上只有一个数字。)
C ++标准(§2.3/ 3)中的精确要求是:
在源和执行基本字符集中,每个字符的值在0之后 上面的十进制数字列表应大于前一个值。
至少从C99开始,C标准的措辞相同,但§5.2.1/ 3。
答案 1 :(得分:2)
字符零(' 0')的数值为48,' 1'是49,依此类推。
您可能会发现这是一个有用的习惯用法,可以从ascii值中获取数值。
int prime = digits[0] - '0';
你也可以找到 man ascii 信息(或类似的手册页,如果你使用其他字符集)。