#include<stdio.h>
int main()
{
int input = 0;
int binaryNumber = 0;
int decimalNumber = 0;
int remainder = 0;
int i = 1;
int wholeNumber = 0;\
int number = 0;
char hexLetters[] = "ABCDEF";
printf("Press 1 to convert Binary to Hex\n");
printf("Press 2 to convert Hex to Binary\n");
printf("Press 3 to convert Decimal to 2's to Compliment Binary\n");
scanf("%d",&input);
printf("\n");
switch (input)
{
case 1:
{
printf("Enter a Binary number\n");
scanf("%d",&binaryNumber);
char binaryToHex[2];
while(binaryNumber != 0)
{
remainder = binaryNumber%10;
decimalNumber = decimalNumber + (remainder*i);
i = i*2;
binaryNumber = binaryNumber/10;
}
while(decimalNumber != 0)
{
remainder = decimalNumber%16;
wholeNumber = (decimalNumber%16)-(remainder/16);
decimalNumber = 0;
}
int j = 1;
for(j=1;j<16;j++){
if(remainder ==j){
binaryToHex[1] = hexLetters[j-10];
}
else{
binaryToHex[1] = remainder;
}
}
int k = 1;
for(k=1;k<16;k++){
if(wholeNumber == k){
binaryToHex[0] = hexLetters[k-10];
}
else{
binaryToHex[0] = wholeNumber;
}
}
printf("%c%c\n", binaryToHex[0], binaryToHex[1]);请帮帮忙,什么都不会显示,经过一番修修补补后只会显示F,这是
不对。我已经检查过了,以确保余数和wholeNumber正常工作,并且它确实获得了正确的数字,但是,当我尝试将字母存储到binaryToHex时,它总是F,或者根本不是。请帮帮忙
发布于 2013-02-16 09:11:48
最大的问题可能在这一行上:
binaryToHex[1] = remainder;与binaryToHex[0]语句类似。这应该是一个字符(当它是A-F时)。相反,在这里,您将分配一个编号。这将导致打印与该数字对应的ASCII字符,对于0-9,该字符在不可打印值的范围内(NUL-TAB)。
对于'0‘,ASCII整数从48开始。因此,一种解决方法是在形成最终输出时向remainder和wholeNumber变量添加48 (或删除所有“幻数”、'0'),例如
binaryToHex[1] = remainder + '0';另一个问题(我刚刚意识到)是你的循环。
for(k=1;k<16;k++){
if(wholeNumber == k){
binaryToHex[0] = hexLetters[k-10];
}
else{
binaryToHex[0] = wholeNumber;
}
}所以,快速思考一下这个问题。对于1-16,如果数字匹配,则分配十六进制字母,否则分配数字。这在逻辑上是错误的。假设我们的值为5,k将增加到5,这将导致第一个子句成功。这会将hexLetters[5-10]分配给binaryToHex[0],这实际上可能会导致访问冲突。然后,k将继续增加到16,这将导致else子句继续执行,覆盖我们刚刚获得的值。
要解决这个问题,在找到正确的数字时使用break,然后稍微调整一下逻辑,例如:
for(k=1;k<16;k++){
if(wholeNumber == k){
if(k < 10)
binaryToHex[0] = k + '0';
else
binaryToHex[0] = hexLetters[k-10];
break;
}
}发布于 2013-02-16 10:03:08
你确定你的逻辑是正确的吗?我尝试使用10作为输入来跟踪它,但是没有效果。我认为这段代码有太多地方出了问题。
不管怎样,对于你的问题
这条语句: binaryToHex1 =余数;
或者这句话: binaryToHex = wholeNumber;
将整型赋值给binaryToHex;
所以当你使用printf("%c",binaryToHex1)打印它时;
您可以将printf更改为printf("%i",binaryToHex1),这将打印出数字。但是,根据我在您代码中看到的,binaryToHex1和可以被分配一个数字或一个字符,所以如果它被分配了一个字符,但您使用了%i,那么您将会遇到同样的问题。相反,您可以将整数0的asci数添加到语句中,方法是将其附加到语句中,如binaryToHex1 = remainder + '0‘。因此,如果binaryToHex1的值是7,您将打印一个无法打印的ascii字符,但是通过将'0‘或48添加到它,您将打印ascii表示的55,即7,正如您所希望的那样。但我认为你应该考虑重写你的代码,以避免这些黑客攻击。
无论如何,我认为你应该从你的代码逻辑开始,因为我认为它有缺陷,但我可能错了,因为我没有编译器来测试它。
https://stackoverflow.com/questions/14905787
复制相似问题