int main(void)
{
    char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int i;

    i = 0;
    while (s[i] != '\0') {
        printf("%c -> %c\n", s[i], lower(s[i]));
        i++;
    }

    return 0;
}

int lower(int c)
{
    return (c >= 'A' && c<= 'Z') ? c + 'a' - 'A' : c;
}

Это программа для преобразования всех алфавитов в нижний регистр. Итак, в решении они использовали более низкую функцию, но я не знаю, почему они использовали int в качестве возвращаемого типа.

c int
3
sanadKadu 23 Окт 2018 в 17:59

2 ответа

Лучший ответ

Почему функция lower имеет int как тип возвращаемого значения и тип ввода?

  1. Код полностью int математический. Даже если подпись была char c, код имел бы результат int из-за обычных целочисленных рекламных акций.

    int lower(int c) {
      return (c >= 'A' && c<= 'Z') ? c + 'a' - 'A' : c;
    }
    
  2. Для отображения обычно 257 различных значений, таких как tolower(). С int lower(char c) { и c < 0 это может работать иначе, чем tolower().

  3. int обычно близок к целочисленному размеру собственного процессора, а код обычно самый жесткий и быстрый с int по сравнению с char. Это исторический выбор C и компромисс. Включение исходного языка C не привело к созданию прототипа сигнатуры функции, и все аргументы int и под - int были переведены в int.

7.4 Обработка символов

Заголовок <ctype.h> объявляет несколько функций, полезных для классификации и сопоставления персонажи. Во всех случаях аргументом является int, значение которого должно быть может быть представлен как unsigned char или должен быть равен значению макроса EOF. Если аргумент имеет любое другое значение, поведение не определено. C11dr §7.4 1

Эти функции is...() и to...() работают в unsigned char rangeEOF), а не в char.

Надежный код избегает отрицательного char при вызове tolower() или tolower() подобных функций.

// printf("%c -> %c\n", s[i], lower(s[i]));
printf("%c -> %c\n", s[i], lower((unsigned char) s[i]));
3
chux - Reinstate Monica 23 Окт 2018 в 15:18

Скорее всего, это попытка имитировать функцию tolower, которая использует int.

Аналогичный вопрос о tolower с использованием int находится здесь. Почему putchar, toupper, tolower и т. д. . взять int вместо char?

2
lostbard 23 Окт 2018 в 15:06
52952171