我为二进制/十六进制数字制作计算器,其中用户插入8位十六进制数字,我需要将其转换为二进制并按操作打印。我的问题是,在我读取数组中的十六进制数并尝试将其转换并将其存储在另一个数组中之后,在打印之后我得到了奇怪的字符(V<#■jst)tt)
这是我的代码的一部分:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <proyecto.h>
#include <string.h>
int main () {
char op,bin[31],hex[100],hex2[100];
int sizeh,repeat1,repeat2,n,z,i;
printf("Hexadecimal: ");
scanf("%s",hex);
convert(hex,bin,n);
转换功能:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <proyecto.h>
#include <string.h>
void convert(char hex[],char bin[],int n){
int i,b;
printf("\nEquivalent binary value: ");
for(i=0;i<8;i++){
switch(hex[i]){
case '0': scanf("0000",bin); break;
case '1': scanf("0001",bin); break;
case '2': scanf("0010",bin); break;
case '3': scanf("0011",bin); break;
case '4': scanf("0100",bin); break;
case '5': scanf("0101",bin); break;
case '6': scanf("0110",bin); break;
case '7': scanf("0111",bin); break;
case '8': scanf("1000",bin); break;
case '9': scanf("1001",bin); break;
case 'A': scanf("1010",bin); break;
case 'B': scanf("1011",bin); break;
case 'C': scanf("1100",bin); break;
case 'D': scanf("1101",bin); break;
case 'E': scanf("1110",bin); break;
case 'F': scanf("1111",bin); break;
case 'a': scanf("1010",bin); break;
case 'b': scanf("1011",bin); break;
case 'c': scanf("1100",bin); break;
case 'd': scanf("1101",bin); break;
case 'e': scanf("1110",bin); break;
case 'f': scanf("1111",bin); break;
default: printf("\nInvalid hexadecimal digit %c ",hex[i]);
}
}
printf("%s",bin);
}
该函数的要点是在二进制数组中连续写入字符,所以如果我输入AB,数组将首先插入1010,而位置5将继续写入1011但不知何故我不管理它工作
答案 0 :(得分:1)
您可以将scanf("0000",bin);
更改为strcat(bin, "0000");
,依此类推。
请注意,此方法很麻烦,bin
必须足够大并初始化为空字符串,例如:
char bin[33] = "";