2016-12-12 3 views
5

Я пытался распечатать полную диаграмму ASCII. Тем временем я увидел этот код на сайте tutorialsschool.com.Печать диаграммы ascii

#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.

+6

Возможный дубликат [символов печати и их ASCII-код в C] (http://stackoverflow.com/questions/1472581/printing-chars-and-their- ASCII-код в-с) –

+4

[человек isprint] (https://linux.die.net/man/3/isprint) –

+2

32 является пробел, 9 является закладка и т.д. Вы можете по крайней мере попытаться ' % c 'тоже видят еще немного. – SurDin

ответ

3

Возможно, вам будет интересно узнать, что не все символы ASCII являются для печати.

Например, десятичные числа от 0 до 31 являются неизменяемыми значениями ASCII.

См. this reference, в котором упоминается то же самое.

При этом для размещенной среды ожидаемая подпись main() равна int main(void), по крайней мере.

+1

_All_ ASCII-символы _not для печати? _ – qxz

+2

Да, все нет, некоторые из них. –

+0

@ q-l-p все не могут быть распечатаны, и не все доступны для печати, это две разные вещи! –

6

Я действительно смущен, почему он не печатает значения в этих местах.

Потому что этот код непечатаемый ASCII-код. Обратите внимание, что стандартный код ASCII имеет только 7 бит (например, 128 символов), а некоторые из них не подлежат печати (коды управления), поэтому вы не можете их распечатать (например, можете ли вы распечатать Bell 0x07?)

http://www.asciitable.com/


И как Mohit Jain отметил, что вам действительно нужно использовать isprint функцию, чтобы проверить, является ли символ печати на стандартной C локали перед печатью его - очень удобная функция.

2

Подмножество из ASCII символов можно распечатать. Некоторые из них, такие как control characters линейки кормов, колокол, и т.д ..

деталь: ASCII определяется для кодов 0 до 127. Loop нуждается только for(i=0;i<=127;i++) для полной ASCII диаграммы а.

-

OTOH, возможно, один хочет напечатать полную таблицу всех char. Когда печатаются char, они сначала преобразуются в unsigned char. Итак, создадим диаграмму всех unsigned char.

Примечание: Использование ASCII символов для кода от 0 до 127 в очень обычны, но не определен С.

Чтобы определить, является ли unsigned char является печати, используйте функцию isprint(). Для других напечатайте escape-последовательность.

#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'