【问题标题】:why x - x is nothing in putchar() in c language? [closed]为什么 x - x 在 c 语言的 putchar() 中什么都不是? [关闭]
【发布时间】:2018-08-07 02:01:36
【问题描述】:

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

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 0 是什么字符?
  • x 和 y 将保存您输入的任何值的 ASCII 编码。因此,当您输入11 时,x 和 y 都将保存 ASCII 编码,如果为 1,即整数 '49'。对于上面带有x = x - x 的代码,这将留下零,即x 中的NULL 字符。所以, putchar 不会打印任何东西。所以,如果你从 49 中减去 3,你会得到 46,这是 . 的 ASCII 编码,这就是 putchar 在这种情况下会输出的内容。
  • 为了迂腐,C 标准对可能在实现中使用的字符编码几乎没有限制,并且不需要 ASCII。限制之一是空字符\0(或有时缩写为NUL)的值为0,而不管使用的实际编码如何。此字符用于终止 C 中的字符串。EBCDIC 是另一种已在实现中使用的编码,但如今已不常见。 UTF-8 包含 ASCII 作为子集,并且可能是您系统上使用的实际编码。在所有这些编码中,空字符的值为 0。

标签: c putchar


【解决方案1】:

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

然后在 ASCII 表中查找 0,您将看到 null。所以它会打印 null(看起来像一个空格)和一个 1。

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

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

-'0' 方法

int numeric = x - '0';

atoi 方法需要a conversion to string

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

如果您输入非数字字符,这两个都没有意义,例如啊

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2019-08-07
    • 2017-06-07
    • 2017-07-31
    • 2014-11-07
    • 2013-03-08
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多