Цитата(Сергей Борщ @ Dec 27 2008, 14:15) *
если char знаковый, то if(char_code < 'А') /* cyrilic 'A' */ работает с точностью до наоборот от ожидаемого.
C этим согласен.
Цитата(rezident @ Dec 28 2008, 01:00) *
Ошибаетесь. Представление чисел со знаком такое же, как и на числовой оси декартовых координат. -128 слева, 0 в центре и +127 справа. Если мне не верите, то загляните в limits.h.
Код
#define CHAR_MAX         127            /* Maximum "char" value */
#define CHAR_MIN        (-128)          /* Mimimum "char" value */
Тут не поспоришь. Зачем верю не верю.
Я имел в виду другое. Я хотел показать во что проецируются коды символов таблицы в зависимости от их типа.
А таблица знакогенератора обычно начинается с 0 а не с -128.
Хотя наверное можно и извратиться. Но в моём понимании правильнее плясать от печки, т.е. с 0
Цитата(rezident @ Dec 28 2008, 01:00) *
При знаковом char условие невыполнимо, т.к. число не может одновременно быть "больше большего" и "меньше меньшего".
Да я тут ступил. Вечером в пятницу, уходя домой, забыл взять мозг. Извиняюсь за досадную ошибку.

Пусть char без знака
Пусть гипотетически код символа 'А' = 126
Пусть гипотетически код символа 'Г' = 129
условие if ((ch>'А')&&(ch<'Г')) {} гипотетически выполнимо если ch='Б'=127.

Теперь пусть char со знаком
Теперь код символа 'А' = 126
Теперь код символа 'Г' = -2
условие if ((ch>'А')&&(ch<'Г')) {} невыполнимо даже если ch='Б'=127.

Вот ради этого понимания я и затеял весь сыр-бор.

Всем спасибо!
Я для себя сделал выводы, посмотрев на код Сергея. Надо обязательно приводить тип к беззнаковому при сравнении.
Век живи век учись!