C 将整数(值大于9)转换为字符

C 将整数(值大于9)转换为字符,c,C,我正在尝试将一个整数(大于9,小于9,通过下面的过程可以轻松转换)转换为字符。但在转换后,我得到一些字符,如“?”。下面是代码: #include <stdio.h> int main(void) { int i = 15; char c; c=i+'0'; printf("%c", c); return 0; } output: ? Expected output: 15 #包括 内部主(空){ int i=1

我正在尝试将一个整数(大于9,小于9,通过下面的过程可以轻松转换)转换为字符。但在转换后,我得到一些字符,如“?”。下面是代码:

#include <stdio.h>

int main(void) {

     int i = 15;
     char c;
     c=i+'0';

     printf("%c", c);

     return 0;
    }


output: ?
Expected output: 15
#包括
内部主(空){
int i=15;
字符c;
c=i+'0';
printf(“%c”,c);
返回0;
}
输出:?
预期产出:15

“15”是两个字符。您必须将其逐位转换。

因为您有两位数字,所以它不起作用。这种简单的转换适用于数字0-9,但不适用于更大的数字。你可以用。例如,在提供的链接中,您有两个数字,这就是为什么这样打印不起作用。如果要将int转换为字符串,请使用
sprintf

int i= 15;
char str[15];
snprintf(str, 15, "%d", i); // str now contains "15"

直接从整数生成字符串是不可能的,这就是为什么可以这样做的原因

int number = 2;
char character = number + '0';
fprintf(stdout, "%c\n", character);
这是因为
'0'
是表示数字
0
的ascii值,即
48
,并且由于它们在ascii表中按顺序出现,因此将数字添加到其中将得到数字的ascii值

但是
15
由2个ascii值组成,执行转换的快速方法是使用数组,如下所示

char string[3];
int number;
int result;
number = 15;
result = snprintf(string, sizeof(string), "%d", number);
if (result >= sizeof(string))
    fprintf(stdout, "the string was truncated, there is no space to store the result");
else if (result < 0)
    fprintf(stderr, "an error occurred\n");
else
    fprintf(stdout, "%s\n", string);
char字符串[3];
整数;
int结果;
数字=15;
结果=snprintf(字符串,sizeof(字符串),%d”,数字);
如果(结果>=sizeof(字符串))
fprintf(stdout,“字符串被截断,没有空间存储结果”);
否则如果(结果<0)
fprintf(stderr,“发生错误”);
其他的
fprintf(标准输出,“%s\n”,字符串);

为什么您希望输出为15?您不希望将其转换为字符,而是希望将其转换为字符串。为此,网络充满了帮助。正如您所看到的,您的预期结果包含两个字符。有关发生的情况的解释,请查看。是的,我理解为什么它会将“?”作为输出。我只想得到变量c中的'15'@斯塔克斯:是的,我想要solution@AbhishekSinha您无法在单个char变量中获得它。您需要一个数组。请改用
snprintf()
itoa
不是标准函数,这可能不起作用。是的,您是对的,但它几乎总是包含在stblib.h标题中。现在很少有这样的情况:)