我正在尝试打印完整的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符号的其他程序。
答案 0 :(得分:6)
我真的很困惑为什么不在这些地方打印价值。
因为这些代码是不可打印的ASCII代码。注意标准ASCII代码只有7位(即128个字符) - 其中几个是不可打印的(控制代码) - 所以你不能打印它们(例如,你可以打印Bell 0x07吗?)
正如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'