Преобразование предупреждений о регистре и приведении

Я пытаюсь создать программу для преобразования char в нижний или верхний регистр, в зависимости от того, что вводится. Я не хочу использовать функции toupper() и tolower() ctype.h.

Моя функция ConvertCase выглядит так:

char ConvertCase(char input) {
    char convertedChar = 0;

    if (('a' <= input) && (input <= 'z')) {
        convertedChar = (char)ConvertLowerToUpper;
    }
    else if (('A' <= input) && (input <= 'Z')) {
        convertedChar = (char)ConvertUpperToLower;
    }
    else {
        return input;
    }

    return convertedChar;
}

и два моих реальных конвертера выглядят так:

char ConvertLowerToUpper(char input) {
    return input - 32;
}

с добавлением вместо вычитания для верхнего к нижнему.

Когда я компилирую, я получаю два предупреждения,

cast from pointer to integer of different size [-Wpointer-to-int-cast] convertedChar = (char)ConvertLowerToUpper;

По одному на каждый бросок. И я не очень понимаю, что это значит. Если я опускаю приведения, я получаю

assignment makes integer from pointer without a cast [-Wint-conversion]
     convertedChar = ConvertUpperToLower;

Если я проигнорирую предупреждения и протестирую свою программу, она вернет символ «�» из верхнего регистра в нижний, пробел из нижнего регистра в верхний.

Как мне это исправить? Я ценю любую помощь!


person jmkjaer    schedule 10.10.2015    source источник
comment
Вам действительно нужно позвонить ConvertLowerToUpper и ConvertUpperToLower. Прямо сейчас вы пытаетесь присвоить указатели на эти функции convertedChar. Подсказка: когда компилятор жалуется на «что-то без приведения», приведение обычно не является решением.   -  person Kninnug    schedule 10.10.2015
comment
ConvertLowerToUpper(input) вместо ConvertLowerToUpper   -  person Elrond_EGLDer    schedule 10.10.2015
comment
Ге. Спасибо, @helpYou и Книннаг, не знаю, почему я этого не понял! Задача решена! Есть ли способ пометить комментарий как ответ?   -  person jmkjaer    schedule 10.10.2015
comment
@Dradee Нет, поэтому люди должны перестать публиковать ответы в комментариях!   -  person Steven Hansen    schedule 10.10.2015
comment
Нет. @Kninnug, можешь опубликовать это как ответ?   -  person Elrond_EGLDer    schedule 10.10.2015
comment
Когда проблема и решение настолько тривиальны, я просто отвечаю в комментарии, чтобы все могли двигаться дальше. Но и сейчас в ответе.   -  person Kninnug    schedule 10.10.2015


Ответы (1)


Вам действительно нужно позвонить ConvertLowerToUpper и ConvertUpperToLower. Прямо сейчас вы пытаетесь присвоить указатели на эти функции convertedChar.

Подсказка: когда компилятор жалуется на «что-то без приведения», приведение обычно не является решением.

person Kninnug    schedule 10.10.2015