打印ascii图表

时间:2016-12-12 10:44:59

标签: c++ c ascii

我正在尝试打印完整的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符号的其他程序。

3 个答案:

答案 0 :(得分:6)

  

我真的很困惑为什么不在这些地方打印价值。

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

http://www.asciitable.com/

正如Mohit Jain所指出的,你真的需要使用isprint函数来检查一个字符在打印出来之前是否可以在标准C语言环境中打印 - 非常方便的功能。

答案 1 :(得分:3)

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

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

请参阅this reference,其中提及相同内容。

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

答案 2 :(得分:2)

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

细节:为代码0到127定义了ASCII。对于完整的ASCII图表,循环只需要for(i=0;i<=127;i++)

-

OTOH,也许有人想要打印所有char的完整图表。打印char后,它们首先会转换为unsigned char。因此,让我们创建一个所有unsigned char的图表。

注意:在 very common中使用ASCII代码0到127,但不是由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'