为什么我们无法打印从0到30的ASCII值?

问题描述 投票:-2回答:2
#include<stdio.h>
int main()
{
    for(int i=0;i<31;i++)
        printf("%c",i);
}

为什么我们不能打印从0到31的ASCII符号?

c ascii
2个回答
2
投票

您可以,只是其中大多数是non-printable control characters that most shells ignore。如果将stdout用管道传输到文件,该文件将包含这些字符,只是外壳不知道如何处理它们。其中一些由外壳处理(例如换行符和退格字符),而另一些则只是荒谬的(例如传输结束,数据链接转义)而被忽略,或者被替换为不同的字符进行显示(通常是空格或问题)标记等)。


1
投票

C正在打印它们,但是您的终端可能不是显示它们。这种区别很重要,因为终端负责解释程序的输出,打印字母,四处移动光标,更改颜色等。

根据历史惯例,ASCII table的前32个字符被认为是“控制字符”,其中一些是可打印的,一些诸如退格键可移动光标,其他诸如BEL可使您发出哔哔声。

不同的终端可能显示不同或完全不显示。

值得注意的是,ASCII早于现代的“玻璃”终端,并且这些代码用于在页面上移动打印头。早期的机器使用teletypes与它们通信,并且换行符会使纸张向下滚动一行,回车将光标移回该行的开头,就像打字机上的物理carriage return可以移动一样[支架]回到第一列。

这些是相当复杂的机电设备,其中没有任何现代电路,但是它们仍然可以处理ASCII数据,至少对于使用ASCII的设备而言,因为还有其他字符集,例如EBCDIC与ASCII共存。

因为这些字符从不打算打印,所以它们没有标准的ASCII视觉表示。

使用DOS中的“扩展ASCII”,为它们定义了symbols,因为否则似乎很浪费。这些没有控制代码的含义,通常您将它们直接写入控制台字符缓冲区以查看它们。

© www.soinside.com 2019 - 2024. All rights reserved.