2015-09-22 4 views
-6

Я пытаюсь преобразовать целое число (более 9, как показано ниже 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 
+3

Почему вы ожидаете, что выход будет 15? – Michelle

+5

Вы не хотите преобразовывать его в символ, вы хотите преобразовать его в строку. Для этого сеть полна помощи. Как вы можете видеть, ваш ожидаемый результат имеет * два * символа в нем. –

+6

Чтобы узнать, что происходит, ознакомьтесь с таблицей [ASCII] (http://www.asciitable.com/). – Michelle

ответ

2

«15» - это два символа. Вам придется преобразовать его по цифре.

2

Это не сработает, потому что у вас есть двухзначное число. Такое простое преобразование будет работать для чисел 0-9, но не для большего. Вы можете использовать itoa function. Пример использования приведен в приведенной ссылке

+0

'itoa' не является стандартной функцией, это может не сработать. –

+0

yup, вы правы, но почти всегда включаются в заголовки stblib.h. Сейчас очень редко случается, что это не так :) – Gaskoin

0

У вас есть 2 цифры, поэтому печать этого типа не работает. Если вы хотите, чтобы преобразовать INT в строку использовать sprintf:

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

Вместо этого используйте 'snprintf()'. –

0

Создание строка из целых чисел не представляется возможным непосредственно, причина, почему это работает

int number = 2; 
char character = number + '0'; 
fprintf(stdout, "%c\n", character); 

потому, что '0' это значение ASCII который представляет собой номер 0, который равен 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); 
Смежные вопросы