我试图通过这段代码读取未知数量的整数:
while (1) {
int c = getchar ();
if (c == EOF)
break;
else if (isdigit (c))
current = current * 10 + (c - '0');
else {
total += current;
current = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道是什么current = current * 10 + (c - '0'); 但我不知道为什么会这样c - '0'.你能解释一下吗?先感谢您.
c - '0' 是将单个ASCII数字转换为整数的基本方法.
例如,if c等于'9',则其整数值为0x39.为ASCII值'0'是0x30,因此,0x39-0x30 == 0x09等于整数值9.
这是数字的ASCII表:
chr hex dec
'0' 0x30 48
'1' 0x31 49
'2' 0x32 50
'3' 0x33 51
'4' 0x34 52
'5' 0x35 53
'6' 0x36 54
'7' 0x37 55
'8' 0x38 56
'9' 0x39 57
Run Code Online (Sandbox Code Playgroud)
该字符'0'没有ASCII值0.但是,幸运的是,字符'1'确实具有ASCII值'0' + 1,依此类推2,3,4,5,6,7,8和9.因此(伪代码)'n' - '0' == n适用于每个数字.