我对getint计划的一部分有疑问。
当我们得到这个部分时:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
首先,它将c
转换为实际数值,然后将pn
内的数据与10相乘。
为什么它与pn
内的数据相乘10?
此致
肯
答案 0 :(得分:2)
十进制表示法中的任何数字都可以表示为10
234 = 2*10^2 + 3*10 + 4
从左侧读取并乘以10
确保每个数字最终乘以10
的正确幂。这只是霍纳斯规则的应用,真的。
答案 1 :(得分:1)
它从左侧开始,并在它向右移动时遇到的每个连续数字乘以10。
以字符串“234”为例:
*pn
)乘以10,加2,得到2. *pn
)乘以10,加3,得到23。*pn
)乘以10,加4,得到234。答案 2 :(得分:1)
该功能从左侧开始一次读取一位数。因此,如果正在阅读12
,那么首先它会获得c == '1'
和*pn == 0
,它会将1
添加到*pn
,现在*pn
是1
。对于每个连续的数字,它将现有值乘以10(*pn
现在为10
)并添加数字(*pn
现在为12
)。这样它一次读取一位数,最后得到正确的整数。