【发布时间】:2014-09-03 10:44:40
【问题描述】:
我正在尝试用十六进制字符串显示二进制字符串。我的代码是
#include <stdio.h>
int main() {
char hexa[5], num[120];
int i = 0, j, k, t;
char ch;
printf("enetr hexadecimal");
while (ch = getchar() != '\n') {
scanf("%c", &ch);
hexa[i] = ch;
i++;
}
k = 0;
for (j = 0; hexa[j] != '\0'; j++) {
if (hexa[j] == 'A') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'B') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == 'C') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == 'D') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == 'E') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == 'F') {
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '0') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '1') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '2') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '3') {
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '4') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '5') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '0';
num[k++] = '1';
} else if (hexa[j] == '6') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '0';
} else if (hexa[j] == '7') {
num[k++] = '0';
num[k++] = '1';
num[k++] = '1';
num[k++] = '1';
} else if (hexa[j] == '8') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '0';
} else if (hexa[j] == '9') {
num[k++] = '1';
num[k++] = '0';
num[k++] = '0';
num[k++] = '1';
}
}
for (t = 0; num[t] != '\0'; t++)
printf("%c", num[t]);
return 0;
}
这个 sn-p 只从十六进制字符串的第一个字符开始显示,而不是整个字符串。请帮助解决导致错误的原因并帮助我纠正错误
【问题讨论】:
-
您的代码存在多个问题。从循环读取输入开始,您没有任何边界检查,您没有检查输入是否有效,eloop 条件不是您所期望的(阅读关于operator precedence)并且您阅读了两个在循环的每次迭代中输入的字符。然后在下一个循环中查找
hexa数组中的字符串终止符,但实际上并没有将它添加到数组中。 -
不要在
scanf里面使用while,你不需要它,它是多余的。您已经使用getchar()... 从控制台读取了字符 -
谢谢我理解我的错误
-
接收字符串'hexa'应预初始化为全0x00 开发字符串'num'应预初始化为全0x00
标签: c