c语言 - 程序将 int 转换为 ASCII,我不知道为什么?



所以我正在尝试将不同基数的数字转换为 10。我尝试调试,我 100% 确定问题在这里:nr[i]=j;它的作用是获取整数j并将其转换为ASCII,而不管nr[i]是一个字符数组的事实。 我能做些什么来解决这个问题?

int baza,cifra,nrB10,i,j,x,corect;
char nr[32];
char conversie[36]={'0','1','2','3','4','5','6','7','8','9','10','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
printf("Base between 2 and %d):",BAZA_MAX);
scanf("%d",&baza);
printf("Nr. in base %d: ",baza);
scanf("%31s",nr);
nrB10=0;
corect=0;
x=strlen(nr)-1;
for (i=0;i<=x;i++) {
corect=0;
for (j=0;j<baza;j++) {
if (nr[i]==conversie[j]) {
corect=1;
nr[i]=j;
}
}
if (corect==0) {
printf("Numar gresit!");
break;
}
}
for (i=0;i<=3;i++) {
printf("%c",nr[i]);
}
return 0;

当您将数字存储到变量时,它只是一个数字。 这是一种比特模式,计算机并不真正知道(或关心(它代表什么。 当你指定一个 int、char 或其他任何东西时,你是在告诉编译器如何期望使用它。这样它就可以发现错误。在您的情况下,当您打印数字时,该数字"成为"您认为它可能的样子。 printf 中的说明符决定了这一点。 下面是两个示例:

printf("%c", 65);    // It will print an A
printf("%d", 'A');    // It will print 65

同样,如果你能看看计算机持有"A"和65的内部,它们看起来会完全一样。查看内存转储,您无法分辨哪个是哪个。

在这里,我将做同样的事情,并加入十六进制以增加娱乐性:

int n = 65;
printf("%c, %d, %x", n, n, n);     // It prints, A, 65, 41

相关内容

最新更新