减去0时会发生什么

时间:2017-01-19 05:23:15

标签: c++ arrays char

对于输入1234,输出为134.这里发生了什么?当我在这种情况下打印[1]时它什么都不打印。

#include <iostream>
using namespace std;

int main() {
    char a[100];
    cin >> a;
    a[1] = a[1] - '0';
    cout << a;
    return 0;
}

5 个答案:

答案 0 :(得分:7)

'0'是指可打印字符0,在ASCII中转换为值48. '2'的值为50,因此从48减去50会产生2,即文本开头字符。此字符不会转换为可打印字符,因此cout不会打印它。

答案 1 :(得分:2)

  

当我在这种情况下打印1时,它什么都不打印。

参考ASCII table,字符'2'是0x32,字符'0'是0x30

a[1] = '2';  // a[1] is ASCII character 2

a[1] = a[1] - '0'; // a[1] now is 2 (numeric)

它不会打印任何内容,因为ASCII代码2是不可打印的ASCII代码。

答案 2 :(得分:1)

不是134

1+(特殊字符)+3 + 4

因为1234是字符数组

a[1] = 2 
char中的

成为

a[1] = 50 // The Ascii equivalent to a[1]

&#39; 0&#39; ascii值是48

所以

a[1] = 50 - 48

所以[1]成为2,可能会也可能不会在屏幕上打印出来。

答案 3 :(得分:1)

'0'的ASCII值为48,这里用字符而不是数字数减去。在你的代码中,你将'0'减去索引1 char a[100]数组 所以你得到了 a [1] = 50 - 48 这是2。 Char中的2是ETX(文本结尾),不能用字符表示 所以你得到134的输出。取决于你的编译器如何处理输出。 有些编译器可以输出一些特殊字符。

答案 4 :(得分:0)

当您输入的是1234

a[1]='2'

当你减去&#39; 0&#39;形式&#39; 2&#39;你得到2这是ascii开始的文本所以基本上 a [1] =文本开头; 它不会在屏幕上打印任何内容

因此a = 1 34