除非添加打印语句,否则函数不会退出循环

问题描述 投票:0回答:1

我正在使用一种方法来制作十六进制解码器,该方法接受2个字符的数组,将其更改为整数,然后打印出ASCII字符。我正在执行的循环由于某些原因而无法正常工作,但是如果我添加一些打印语句以查看循环时的值,那么该循环就可以正常工作,我也不知道为什么。我盯着它看了一个小时。这是代码。

void decipher(char charArray[])
{
    int baseValue = 0; // represents the empty set of bits 00000000    
    for (int i = 0; i < 2; i++)
    {
        int nibbleForMoving = 0; // represnts the empty set of bits 0000

        if (charArray[i] >= '0' && charArray[i] <= '9')
        {
            nibbleForMoving = charArray[i] - '0';
        }
        if (charArray[i] >= 'a' && charArray[i] <= 'f')
        {
            nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
        }
        baseValue = (baseValue << 4) | nibbleForMoving;
    }
    printf("%c", baseValue); 

}

这不起作用,将不打印任何内容。我也相信我的程序总体上挂在这里的某个地方,但是我不能说。如果我将其修改为这样

void decipher(char charArray[])
{
   int baseValue = 0; // represents the empty set of bits 00000000    
   for (int i = 0; i < 2; i++)
   {
       int nibbleForMoving = 0; // represnts the empty set of bits 0000

       if (charArray[i] >= '0' && charArray[i] <= '9')
       {
           nibbleForMoving = charArray[i] - '0';
       }
       if (charArray[i] >= 'a' && charArray[i] <= 'f')
       {
           nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
       }
       baseValue = (baseValue << 4) | nibbleForMoving;
       printf("%d, %d", baseValue, nibbleforMoving)"
   }
   printf("%c", baseValue); 

}

将会打印额外的打印语句,它将退出循环并正确打印字符而没有问题。有什么想法吗?

c hex printf
1个回答
0
投票

不可复制,以下是我的代码,用于测试您的原始功能,并且正常退出。

#include<stdio.h>

void decipher(char charArray[])
{
    int baseValue = 0; // represents the empty set of bits 00000000    
    for (int i = 0; i < 2; i++)
    {
        int nibbleForMoving = 0; // represnts the empty set of bits 0000

        if (charArray[i] >= '0' && charArray[i] <= '9')
        {
            nibbleForMoving = charArray[i] - '0';
        }
        if (charArray[i] >= 'a' && charArray[i] <= 'f')
        {
            nibbleForMoving = charArray[i] - 'a'+10; // sets nubble to the decimal valu
        }
        baseValue = (baseValue << 4) | nibbleForMoving;
    }
    printf("%c", baseValue); 

}

int main()
{
    char arr[] = {'a','b','c'};

    decipher(arr);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.