А Вы поработайте транслятором: возьмите эту свою
grammar_case и построчно объяните, что будет происходить, когда он вызовется с аргументами A="миллионов", B="миллион", C="миллиона", N=111165678, BASE=1000000.
-- Пн ноя 04, 2013 00:48:54 --Кроме того, разные замечания (не по эффективности)
1. Все, начиная с миллиона склоняется одинаково, и поэтому там достаточно только окончания менять. Это позволит при желании расширить область применимости функции.
2. Вместо трех одинаковых по смыслу параметров A, B, C лучше сделать массив
const char * [3] и для понятности объявить
enum {SINGULAR, DUAL, PLURAL} чтобы его индексировать.
3. Строки типа "ворон" и "миллионов", соответственно, сгруппировать в массивы и сделать статическими константами, чтобы не загромождать программу одинаковыми функциями. То же касательно числительных.
4. Так исторически сложилось, что большими буквами в C обозначают макросы. Я, например, секунды две искал, где там у Вас рядом с MLN, MLRD и проч. объявлено BASE, пока не понял, что это параметр. Лучше называйте параметры маленькими буквами или с нормальной капитализацией.
-- Пн ноя 04, 2013 00:50:02 --Да, и еще:
К слову, моя программа почти
работает, и основная проблема состоит в склонении числительных, которое выполняется неправильно(не всегда правильно).
Если программа не делает то, что она должна делать, это значит, что она не работает :)