【问题标题】:Printing ascii chart打印ascii图表
【发布时间】:2017-04-27 05:06:03
【问题描述】:

我试图打印完整的 ASCII 图表。同时我在tutorialsschool.com网站上看到了这段代码。

#include<stdio.h>
void main() {
int i;
for(i=0;i<=255;i++){
    printf("%d->%c\n",i,i);
}
}

它看起来很完美,但问题是它没有打印位置的符号(我正在使用 Code::Blocks IDE),例如 7、8、9、10 和 32。我真的很困惑为什么它不打印这些位置的值。它在在线编译器上给出了一些奇怪的输出。是 Code::Blocks 的问题吗?打印这些 ASCII 符号的其他程序可能是什么。

【问题讨论】:

  • 32 是空格字符,9 是制表符,等等。你至少可以试试 '%c' 看看更多。
  • ASCII 表中的 0 到 31 组被称为“不可打印字符”。因此,您的问题是为什么您的程序不打印不可打印的字符。 32号是空格,确定不是打印出来的?
  • 欢迎来到字符编码错误信息的世界。您提供的链接显示了一个不是 ASCII 的表。它看起来像CP437。在 C 或 C++ 中,请参阅程序使用的字符编码的语言环境函数。要查看您的终端(控制台)使用的编码,请转到 locale (Linux) 或 chcp (Windows)。两者都不太可能是 ASCII。如果您的 IDE 在非控制台窗口中显示输出,则可能具有通过 IDE 控制的不同设置。

标签: c++ c ascii


【解决方案1】:

我真的很困惑为什么它不在这些位置打印值。

因为这些代码是不可打印的 ASCII 代码。请注意,标准 ASCII 码只有 7 位(即 128 个字符)——其中有几个是不可打印的(控制代码)——所以你不能打印它们(例如,你能打印 Bell 0x07 吗?)

http://www.asciitable.com/


正如 Mohit Jain 所指出的,您确实需要使用 isprint 函数来检查一个字符是否可以在标准 C 语言环境中打印,然后再打印出来 - 非常方便的函数。

【讨论】:

    【解决方案2】:

    您可能想知道并非所有的 ASCII 字符都是可打印的

    例如,十进制 0 到 31 是不可打印的 ASCII 值。

    参见this reference,其中提到了相同的内容。

    也就是说,对于托管环境,main() 的预期签名至少是 int main(void)

    【讨论】:

    • 所有 ASCII 字符不可打印?
    • 是的,所有都不是,有些是。
    【解决方案3】:

    只有ASCII 字符的子集是可打印的。有些是control characters,比如换行、铃等。

    详细信息:ASCII 是为代码 0 到 127 定义的。对于 完整的 ASCII 图表,循环只需要 for(i=0;i&lt;=127;i++)

    --

    OTOH,也许有人想打印所有char 的完整图表。打印char 时,首先将它们转换为unsigned char。所以让我们创建一个所有unsigned char 的图表。

    注意:非常中的字符代码 0 到 127 使用 ASCII,但 C 没有指定。

    要确定unsigned char 是否可打印,请使用isprint() 函数。对于其他人,打印一个转义序列。

    #include<ctype.h>
    #include<limits.h>
    #include<stdio.h>
    
    int main(void) {
      unsigned char i = 0;
      do {
        printf("%4d: ", i);
        if (isprint(i)) {
          printf("'%c'\n", i);
        } else {
          printf("'\\x%02X'\n", i);
        }
      } while (i++ < UCHAR_MAX);
      return 0;
    }
    

    样本输出

       0: '\x00'
       1: '\x01'
       ...
       7: '\x07'
       8: '\x08'
       9: '\x09'
      10: '\x0A'
      ...
      31: '\x1F'
      32: ' '
      33: '!'
      34: '"'
      ...
      65: 'A'
      66: 'B'
      67: 'C'
      ...
     126: '~'
     127: '\x7F'
     ...
     255: '\xFF'
    

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      相关资源
      最近更新 更多