Почему мы не можем печатать значения ASCII от 0 до 31? - PullRequest
0 голосов
/ 21 апреля 2020
#include<stdio.h>
int main()
{
    for(int i=0;i<=31;i++)
        printf("%c",i);
}

когда мы пытаемся запустить этот код, тогда ничего не печатается, в чем причина?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

C печатает их, но, возможно, ваш терминал не отображает их . Это различие важно, поскольку терминал отвечает за интерпретацию выходных данных вашей программы, печать букв, перемещение курсора, изменение цветов и т. Д.

По историческому соглашению первые 32 символа таблицы ASCII считаются «управляющими символами», некоторые из которых могут быть напечатаны, некоторые, например, backspace, которые перемещают курсор, другие, например, BEL, которые могут издавать звуковой сигнал вашего терминала.

Различные терминалы могут отображать их по-разному, или не отображать all.

Стоит отметить, что ASCII предшествовал современным «стеклянным» терминалам и что эти коды использовались для перемещения печатающей головки на странице. В ранних машинах для связи с ними использовались телетайпы , и при переводе строки на одну строку бумага проворачивалась, возврат каретки перемещал курсор назад к началу строки, очень похоже на физический возврат каретки . на пишущей машинке, которая переместит «каретку» обратно в первый столбец.

Это были довольно сложные электромеханические устройства, в которых не было никакой современной схемы, но они все еще могли обрабатывать данные ASCII, по крайней мере для тех, кто использует ASCII, поскольку существуют другие наборы символов, такие как EBCDI C, которые сосуществовали с ASCII.

Поскольку эти символы никогда не предназначались для печати, поэтому они не У него нет стандартного визуального представления в ASCII.

При использовании "расширенного ASCII", используемого в DOS, для них определены символы , поскольку в противном случае это выглядит как пустая трата. У них нет значений управляющего кода, обычно вы записываете их непосредственно в буфер символов консоли, чтобы увидеть их.

1 голос
/ 21 апреля 2020

Вы можете, просто большинство из них - непечатные управляющие символы, которые большинство оболочек игнорируют . Если вы передадите stdout в файл, файл будет содержать эти символы, это просто оболочка, которая не знает, что с ними делать. Некоторые из них обрабатываются оболочками (например, перевод строки и символы возврата на одну строку), а другие просто бессмысленны (например, конец передачи, выход канала данных) и игнорируются или заменяются другим символом для отображения (часто пробел или вопрос знак или тому подобное).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...