current = current*10 +(c - '0');

amU*_*ser 3 c input

我试图通过这段代码读取未知数量的整数:

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'.你能解释一下吗?先感谢您.

Tom*_*ese 8

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","1","9"的事实并不特定于ASCII:它在EBCDIC中也是有效的,事实上,它是由C标准强制执行的. (7认同)

dje*_*lin 5

该字符'0'没有ASCII值0.但是,幸运的是,字符'1'确实具有ASCII值'0' + 1,依此类推2,3,4,5,6,7,8和9.因此(伪代码)'n' - '0' == n适用于每个数字.

  • 对不起,但是''n' - '0'`是常数,等于'62'(至少在ASCII中). (2认同)