функция, которая конвертирует char в целое число и возвращает значение [C] - PullRequest
0 голосов
/ 09 июня 2018

Итак, я пытался написать функцию на C, которая преобразует переменную int в char.Глядя на предыдущие темы, я замечаю, что лучший способ сделать это - использовать его так: a + '0'.

Итак, я сделал:

char intToChar(int a) {
   return a + '0';
}

Хотя, моя IDE (Clion)предупреждает меня:

Возвращение int из функции, возвращающей char: значение типа int может не вписываться в тип получателя char 1011

1014 *.Я попытался изменить его на следующую функцию (замените char на int):
int intToChar(int a) {
    return a + '0';
}

И предупреждение исчезает.Но это заставило меня задуматься, если это правильный способ сделать это.Я знаю, что когда функция возвращает char, она на самом деле возвращает int.Но имя функции intToChar, поэтому она должна возвращать char.Это правильный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Попробуйте этот метод typecast, но вы должны ввести значение ascii no, например, в этом случае значение ascii 2 равно 50.

#include <stdio.h>

char intToChar(int a){

    char c=(char)a;
    return c;
}

int main(void) {
    // your code goes here

    int a=50;
    char c;
    c=intToChar(50);
    printf("%c",c);

    return 0;
}
0 голосов
/ 09 июня 2018

Символьный литерал 0 - как и любой символьный литерал - имеет тип int (попробуйте, например, напечатать sizeof('0'):

int main() {
    printf("sizeof '0' is ... %ld\n",sizeof('0'));
}

Вывод:

sizeof '0' is ... 4

Таким образом, выражение типа a + '0' также даст int. Возвращая затем int, где функция определяет тип возвращаемого значения char, приводит к этому предупреждению.

Так что на самом деле вы бынапишите int intToChar(int a), как вы предложили, и другие символьные функции, такие как tolower, действуют аналогично.

Кстати: обратите внимание, что тип данных char отличается от типа данных int, поскольку char всегда гарантированнопо определению имеет размер 1.

И обратите внимание: если у вас есть char x = 5;, то выражение типа x + '0' также даст тип данных int, поскольку '0' имеет тип int.

0 голосов
/ 09 июня 2018

Проблема связана с неявными правилами продвижения .В вашем примере:

a + '0'

Вы добавляете int и char.Поскольку они разные, один из этих двух должен быть преобразован в другой.Так как char обычно составляет 8 битов, а целые числа обычно 32 (в C это не всегда так, но в данном случае это не имеет значения), то на самом деле выполняется:

a + (int)'0'

Длинная историяКороче говоря, результат будет int.Чтобы убрать это предупреждение, просто сделайте:

(char) (a + '0') // or (char)a + '0'

Примечание : для вашего случая использования вы можете просто набрать (char)a, и результат будет правильным.

...