首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中显示数组

如何在C中显示数组
EN

Stack Overflow用户
提问于 2013-02-16 09:02:56
回答 2查看 466关注 0票数 0
代码语言:javascript
复制
#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,或者根本不是。请帮帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-16 09:11:48

最大的问题可能在这一行上:

代码语言:javascript
复制
binaryToHex[1] = remainder;

binaryToHex[0]语句类似。这应该是一个字符(当它是A-F时)。相反,在这里,您将分配一个编号。这将导致打印与该数字对应的ASCII字符,对于0-9,该字符在不可打印值的范围内(NUL-TAB)。

对于'0‘,ASCII整数从48开始。因此,一种解决方法是在形成最终输出时向remainderwholeNumber变量添加48 (或删除所有“幻数”、'0'),例如

代码语言:javascript
复制
binaryToHex[1] = remainder + '0';

另一个问题(我刚刚意识到)是你的循环。

代码语言:javascript
复制
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,然后稍微调整一下逻辑,例如:

代码语言:javascript
复制
for(k=1;k<16;k++){
    if(wholeNumber == k){
        if(k < 10)
            binaryToHex[0] = k + '0';
        else
            binaryToHex[0] = hexLetters[k-10];

        break;
    }
}
票数 0
EN

Stack Overflow用户

发布于 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,正如您所希望的那样。但我认为你应该考虑重写你的代码,以避免这些黑客攻击。

无论如何,我认为你应该从你的代码逻辑开始,因为我认为它有缺陷,但我可能错了,因为我没有编译器来测试它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14905787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档