我遇到了这个 C 程序:
int main() {
printf("Enter your address, (e.g. 51 Anzac Road) ");
gets(address);
number = 0;
i = 0;
while (address[i] != ' ') {
number = number * 10 + (address[i] - 48);
i++;
}
}
我理解 number = number * 10 + (address[i] - 48);
是从输入中获取数字,但有人可以向我解释这是如何工作的吗?它如何根据输入生成数字?
最佳答案
C 要求数字 0
到 9
以该顺序连续存储在执行字符集中。 48
是 '0'
的 ASCII 值,例如:
'3' - 48 == 3
对于任何数字。
C 不需要 ASCII,所以更好的是:
'3' - '0'
因为 48
适用于 ASCII,而 '0'
根据定义适用于任何字符集。
如果 address
包含 "456 "
,则:
- 当
i == 0
和number == 0
时,number * 10 + (address[0] - 48)
等于0 * 10 + 4
,或4
。 - 当
i == 1
时,number * 10 + (address[1] - 48)
是4 * 10 + 5
,或者45
。 - 当
i == 2
时,number * 10 + (address[2] - 48)
是45 * 10 + 6
,或者456
你就完成了。
永远不要使用 gets()
,它很危险,甚至不再是 C 的一部分。
关于将字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227476/