Цитата(Сергей Борщ @ 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.
Вот ради этого понимания я и затеял весь сыр-бор.
Всем спасибо!
Я для себя сделал выводы, посмотрев на код Сергея.
Надо обязательно приводить тип к беззнаковому при сравнении.Век живи век учись!