本帖最后由 jackz007 于 2021-4-1 17:29 编辑
getchar() 属于有缓冲的键盘输入,当通过键盘输入字符串的时候,每个按键都被送入键盘缓冲区保存,这个期间还有修改的机会,直到按下回车键以后。getchar() 会按照i键入顺序,依次从键盘缓冲区取得键入的所有字符。
至于这一句
- num = 10 * num + (ch - '0');
复制代码
其作用是把字符变成相应的数字。
在计算机中,所有的字符都是通过编码来表示的,ASCII 码的范围是 0~127,计算机中用到的所有西文字符都被完全包括在这个编码范围之内。可以这样说,计算机中用到的所有字符都是数字,例如, 'A' 是 65,'a' 是 97,'0' 是 48,'9' 是 57,最关键的是 '9' = '0' + 9,'9' - '0' = 9,假如 ch = '6' 那么,ch - '0' = '6' - '0' = 6
循环前,num = 0,假如键盘输入了 359,那么:
第1次循环 : num = 0 , ch = '3' , num = 10 * num + (ch - '0') = 0 * 10 + ('3' - '0') = 3
第2次循环 : num = 3 , ch = '5' , num = 10 * num + (ch - '0') = 3 * 10 + ('5' - '0') = 35
第3次循环 : num = 35 , ch = '9' , num = 10 * num + (ch - '0') = 35 * 10 + ('9' - '0') = 359
于是,'359' 就变成了 359