在C(转换器)中未完全工作 conta=16; oper3=0; oper=10; oper2=15; 对于(i=0;i=0) { 续--; oper2=oper%2; binario[conta]=oper2; 操作=操作/2; } } 其他的 { 而(!(esadecimale[oper3]==esadecimale[oper])) { oper++; } while(操作>0) { 续--; oper2=oper%2; binario[conta]=oper2; 操作=操作/2; } } oper=10; oper3++; } printf(“二进制e’中的数字转换:”; 对于(i=0;i

在C(转换器)中未完全工作 conta=16; oper3=0; oper=10; oper2=15; 对于(i=0;i=0) { 续--; oper2=oper%2; binario[conta]=oper2; 操作=操作/2; } } 其他的 { 而(!(esadecimale[oper3]==esadecimale[oper])) { oper++; } while(操作>0) { 续--; oper2=oper%2; binario[conta]=oper2; 操作=操作/2; } } oper=10; oper3++; } printf(“二进制e’中的数字转换:”; 对于(i=0;i,c,C,您的代码太复杂,有些地方没有意义(例如,您有许多代码行要初始化ESADecime,然后使用scanf()覆盖其中的一些代码)。您无法区分ASCII数字和整数,因此while循环运行时间过长: conta = 16; oper3 = 0; oper = 10; oper2 = 15; for(i=0;i<16;i++) { esa

您的代码太复杂,有些地方没有意义(例如,您有许多代码行要初始化
ESADecime
,然后使用
scanf()
覆盖其中的一些代码)。您无法区分ASCII数字和整数,因此
while
循环运行时间过长:

           conta = 16;
           oper3 = 0;
           oper = 10;  
           oper2 = 15;
           for(i=0;i<16;i++)
           { 
             esadecimale[i] = 0;
           }
           for(i=0;i<16;i++)
           {
             binario[i] = 0;
           }
           esadecimale[10] = 'A';
           esadecimale[11] = 'B';
           esadecimale[12] = 'C';
           esadecimale[13] = 'D';
           esadecimale[14] = 'E';
           esadecimale[15] = 'F';

           printf("Inserisci il numero esadecimale da convertire (4 inserimenti): ");
           for(i=4;i>0;i--)
           {
             scanf("%s",&esadecimale[i]);
           }

           while(oper3 < 4)
            {
             if(esadecimale[oper3] < 10)
             {
                oper = esadecimale[oper3];
                while(oper > 0)
                 {
                    conta--;
                    oper2 = oper % 2;
                    binario[conta] = oper2;
                    oper = oper / 2;
                }
             }
             else
             {
                while(!(esadecimale[oper3]==esadecimale[oper]))
                {
                   oper++;
                } 
                while(oper > 0)
                {
                    conta--;
                    oper2 = oper % 2;
                    binario[conta] = oper2;
                    oper = oper / 2;
                }

             }
              oper = 10;
              oper3++;
           }
        printf("Il numero esadecimale convertito in binario e': ");
        for(i=0;i<16;i++)
        {
            printf("%i",binario[i]);
        }
您的>=10案例不应该与<10案例有太大的不同。以下是解决这些问题的重写:

oper = esadecimale[oper3]; // contains '1' = 49 = 110001 binary
while(oper > 0) // loops seven times instead of once!
使用
scanf()
这种方式也会使十六进制数字不区分大小写。此子例程可以变得更简单(无数组、更少循环等),但我将其限制为您在原始代码中已经使用的功能

测试

#define CONTA 16

void esadecimale_a_binario() {

    printf("Inserisci il numero esadecimale da convertire (4 inserimenti): ");

    unsigned esadecimale;

    (void) scanf("%4x", &esadecimale);

    printf("Il numero esadecimale convertito in binario e': ");

    int binario[CONTA] = { 0 };

    for (int i = 0; i < CONTA; i++)
    {
        int j = CONTA - i - 1;

        binario[j] = esadecimale % 2;

        esadecimale /= 2;
    }

    for (int i = 0; i < CONTA; i++)
        {
            printf("%i", binario[i]);
        }

    printf("\n");
}

此代码是否有任何开头或结尾?无论如何,对于所述任务来说,看起来太长了。您的问题存在多个问题,这将阻止此网站上的人帮助您。请仔细阅读(i=4;i>0;i--){scanf(“%s”)和&esadecimale[i])}的、、和将覆盖您已经输入的字符串的一部分。是的,很抱歉,我忘了说这是多转换器的一部分,所以这只是十六进制->二进制的一段代码。@Gabriele“部分代码”听起来不像是。
#define CONTA 16

void esadecimale_a_binario() {

    printf("Inserisci il numero esadecimale da convertire (4 inserimenti): ");

    unsigned esadecimale;

    (void) scanf("%4x", &esadecimale);

    printf("Il numero esadecimale convertito in binario e': ");

    int binario[CONTA] = { 0 };

    for (int i = 0; i < CONTA; i++)
    {
        int j = CONTA - i - 1;

        binario[j] = esadecimale % 2;

        esadecimale /= 2;
    }

    for (int i = 0; i < CONTA; i++)
        {
            printf("%i", binario[i]);
        }

    printf("\n");
}
% ./a.out
Inserisci il numero esadecimale da convertire (4 inserimenti): ABCD
Il numero esadecimale convertito in binario e': 1010101111001101
%