在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
%