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