Кажется, я не могу найти ответ, почему Я не могу набрать приведенное целое число в тип 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 для чисел, либо мусором. ** Я не ищу способ обойти это, просто чтобы понять, что происходит, когда код компилируется или во время выполнения. Спасибо!