我对 getint 程序的一部分有疑问。
当我们得到这部分时:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
首先它转换c成它的实数值,然后它把里面的数据乘以pn10。为什么它把 10 和里面的数据相乘pn?
问候,
肯
我对 getint 程序的一部分有疑问。
当我们得到这部分时:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
首先它转换c成它的实数值,然后它把里面的数据乘以pn10。为什么它把 10 和里面的数据相乘pn?
问候,
肯
十进制表示法中的任何数字都可以表示为多项式10
234 = 2*10^2 + 3*10 + 4
从左边读取并乘以10确保每个数字最终乘以 的正确幂10。这只是霍纳斯规则的应用,真的。
该功能一次读取一位,从左侧开始。因此,如果它正在读取,比如说,12那么首先它得到c == '1'and *pn == 0,它添加1到*pn并且现在*pn是1。对于每个连续的数字,它将现有值乘以十(*pnis now 10)并添加数字(*pnis now 12)。这样,它一次读取一个数字并以正确的整数结束。
它从左侧开始,并在向右移动时遇到的每个连续数字乘以 10。
以字符串“234”为例:
*pn) 乘以 10,加 2,得到 2。*pn) 乘以 10,加 3,得到 23。*pn) 乘以 10,再加上 4,得到 234。