对于为什么我无法在for循环中将计数整数转换为char类型的方法,我似乎找不到答案。下面是一个简单的实例,在该实例中,我尝试在循环开始之前和之后声明类型大小写,但没有发现任何地方。从根本上讲,我不明白为什么不允许这样做,或者为什么这样做太愚蠢,以至于找不到任何信息。
#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
我期望将数字的打印值作为char而不是空白值。终端或ascii值可能无法正确表示,可能无法解决我问题的根源。 **情况B显示了j列的数值。但是,这些值是使用双占位符打印的。如果我从double到char的类型大小写起作用了,那么这些值将是数字或垃圾的关联ascii值。**我不是在寻找解决此问题的方法,只是为了了解代码在运行时的情况。编译或在运行时。谢谢!
答案 0 :(得分:0)
终端在格式化字符串中以%c显示时,NUL字符可能有问题。我对程序做了一点改动。
#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 Importand是可打印字符,从十进制32开始,带有空格。参见ASCII Printable。在此之前,没有任何输出是正常的。 %c尝试根据ASCII表转换可打印字符中的十进制值。还可以查看C reference。%d用于带符号的十进制整数。
答案 1 :(得分:-2)
因为您要转换的数字大于一个字符。字符只能是1个字符,因此您不能将9位数字/字符放入单个字符中。这需要使用char [] / string才能完成。
或者尝试更改x = 0-> 9,但不能超过一位数字。