为什么 x - x 在 C 语言的 putchar() 中什么都不是?

why x - x is nothing in putchar() in c language?

在下面的代码中,如果我输入 11(1 和 1),输出为:[]1。 [] 部分不是垃圾,我只是用符号(“[]”)来表示空输出。因此,如果在 1 前面,则实际输出只是 1,其中一个为空 space。

int main(void)
{
   int x = 1;

   char y = 1;

   x = getchar();
   y = getchar();
   x = x - x;
   putchar(x);
   putchar(y);
}

此外,如果我替换 x = x - x;至

x -= 3;

并输入 11 或 22,它会给我类似 *1 或 /2 的输出。

为什么会这样?

谢谢。

您必须考虑 ASCII 值。当你执行 x = x - x 时,你说的是 x = 0(我输入的任何字符的 ascii 代码 x 减去它本身总是 0)

然后在 ASCII table 中查找 0,您将看到 null。所以它会打印 null(看起来像 space)和 1.

当您执行 x -= 3; 时,您将获取您输入的字符的数字 ASCII 代码,然后减去 3。如果您查看 ASCII table,您会注意到字符 1 之前的 3 个字符是 *,字符 2 之前的三个字符是 /。这解释了您得到的结果。

如果你想把字符转换成它所代表的数值,有很多方法可以做到这一点,你可以减'0'或者在C中将char转换成字符串后使用atoi函数。

-'0'方法

int numeric = x - '0';

atoi 方法需要 a conversion to string.

char str[2] = "[=11=]";
str[0] = x;
int numeric = atoi(str);

如果您输入的是非数字字符,例如一个