Задали задачу на c
Написать вывод всех чисел с кодами от -128 до 127. Как меняется вывод в зависимости от выбранной кодировки? В windows гуглить команду для смены кодировки внутри текущего окна терминала – chcp.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
char r, k;
FILE* out = fopen("out.txt", "w");
if (!out)
{
perror("input");
exit(-42);
}
for (int i = -128; i < 128; i++) {
r = (char) i;
fprintf(out, "%d %c\n", i, r);
printf("%d %c\n", i, r);
}
fclose(out);
return 0;
}
Написал такое решение, правильное ли оно?
Ответы (1 шт):
Написал такое решение, правильное ли оно?
На самом деле, вопрос достаточно сложный... Дело в том, что в Вашей программе предполагается однобайтовая кодировка символов. Т.н. "кодовая таблица".
Первая половина этой таблицы (символы с кодом до 127) является стандарной для любой национальной кодировки и называется ASCII таблицей. Но даже с ней есть проблемы, т.к. дале не все символы тут являются "печатаемыми", т.е. имеют графическое представление. Например, код 7 должен интерпретироваться как подача терминалом звукового сигнала ("Звонок"). Для разруливания таких проблем в стандартной библиотеки С есть функция int isprint(int c);
Символы, коды которых отрицательны, ложатся в верхнюю половину кодовой таблицы. Например, символ с кодом -1 (в 16-ричной кодировке 0xFF) является последним в кодовой таблице и в кодировке cp1251 означает букву 'я'. беда в том, что для кирицы существует несколько(!!!) кодовых таблиц, которые не совпадают: cp1251, cp866. KOI8-R и ещё более редкие.
Поэтому, не зря в задании спрашивается "Как меняется вывод в зависимости от выбранной кодировки?"
Но, на самом деле, эти вопросы уходят в историю. Сейчас, чаще всего, в компьютерных системах используется кодировка UTF8, которая отображается одинаково независимо ни от чего на всех компах с любыми ОС. Это относится, разумеется, ко всем линухам, макам и андроидам.
Я точно не уверен, но (насколько мне известно) даже мелкософты начали двигаться в этом направлении..
Так что это задание - анахронизм в значительной степени.