конвертировать int counter в char для цикла for c - PullRequest
0 голосов
/ 13 сентября 2018

Кажется, я не могу найти ответ, почему Я не могу набрать приведенное целое число в тип char в цикле for . Ниже приведен простой пример, в котором я пытался объявить регистр типа до и после начала цикла, но нигде не получил. По сути, я не понимаю, почему это не разрешено и не может, или я слишком глуп, чтобы найти какую-либо информацию по этому вопросу.

#include <stdio.h>

int
main(void){
    int i;                
    //char j;         <-If i declare here
    //char j=(char)i; <-or here there is no profound affect 

    for(i=0;i<9;++i){
        char j=(char)i;
        printf("i=%d, j=%c\n", i, j);} <--Case A: j=%c, Case B: j=%d 
  return 0;
}

OUTPUT

Case A Output printf("%c",j) (j initialized as char & typecast as char)
i=0, j=
i=1, j=
i=2, j=
i=3, j=
i=4, j=
i=5, j=
i=6, j=
i=7, j=
i=8, j=

Case B Output printf("%d",j) (j initialized as char & typecast as char)
i=0, j=0
i=1, j=1 <- if typecast from int to char worked these values should not  
i=2, j=2 <- show up when using printf("%d",j)
i=3, j=3
i=4, j=4
i=5, j=5
i=6, j=6 
i=7, j=7
i=8, j=8

Я ожидал печатного значения числа в виде символа вместо пустых значений. Может быть проблема с терминальными или ascii значениями, которые не отображаются должным образом, но это не отвечает корню моего вопроса. ** Случай B показывает числовые значения для столбца j. Однако эти значения были напечатаны с использованием двойного заполнителя. Если бы мой случай типа от double до char работал, эти значения были бы либо ассоциированными значениями ascii для чисел, либо мусором. ** Я не ищу способ обойти это, просто чтобы понять, что происходит, когда код компилируется или во время выполнения. Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Терминал может иметь проблему с символом NUL, когда отображается с% c в форматированной строке.Я немного изменил Программу ..

#include <stdio.h>
int main(void){
int i, x=123456789;
//char j;
char j=(char)i;
printf("int i: %d\n",i);
printf("int x: %d\n",x);
printf("char j: %d\n",j);
printf("hex j: 0x%02x\n",j);
for(i=32;i<128;++i){
    char j=(char)i;
    printf("i=%d, j=0x%02x, j= %d, j =%c\n", i, j, j, j);
}
printf("char j: %c\n",j);
// Problems is the output as char?
// Programmers Notepad Consol Specific!
printf("Terminal Stops before this in PN :D\n");
return 0;
}

Я думаю, что Программа делает то, что вы хотите, при печати с% d или% x.Но% c создает проблемы.Я использовал Блокнот Программистов.Другие программы могут не иметь моей проблемы: D Важно, что печатаемые символы начинаются с десятичного числа 32 с пробелом.См. ASCII для печати .До этого нормально не получать вывод.% c пытается преобразовать десятичное значение в печатный символ в соответствии с таблицей ASCII.Также обратите внимание на ссылку C .% D для целого числа со знаком десятичного числа.

0 голосов
/ 13 сентября 2018

Потому что число, которое вы пытаетесь конвертировать, больше чем символ.Символ может быть только 1 символом, следовательно, вы не можете поместить 9 цифр / символов в один символ.Это должно быть char [] / string, чтобы делать то, что вы пытаетесь.

Или попробуйте изменить x = 0-> 9, но не более одной цифры.

...