почему один дает мне int, а другой нет ?:
toupper(member_names[2]);
а также:
member_names[2] = toupper(member_names[2]);
toupper
принимает символ (закодированный в int
по большей части историческим причинам) и возвращает заглавный эквивалент этого символа.
Следовательно, ваша первая версия ничего не дает. Ваш второй новообращенный member_names[2]
в верхнем регистре эквивалент.
Также обратите внимание, что (в большинстве реализаций) char
может иметь отрицательное значение (например, акцентированные символы в ISO 8859- *). Передача отрицательного значения в toupper
может / приведет к (серьезным) проблемам — если member_names
это массив unsigned char
обычно вы хотите unsigned char
прежде чем перейти к toupper
:
member_names[2] = toupper(static_cast<unsigned char>(member_names[2]));
toupper
функция не изменяет свой аргумент.
Итак, этот вызов:
toupper(member_names[2]);
возвращает значение, которое вы игнорируете.
Другая версия берет значение из toupper
функция и назначение его member_names[2]
тем самым изменяя предыдущее значение.