как исправить этот код (преобразование двоичного в десятичное с символом в с)? - PullRequest
0 голосов
/ 09 июля 2019

почему этот код не работает? (Я хочу, чтобы преобразовать число из двоичного в десятичное) есть проблема с указателем? или умножение (char * int)

char cara[100];
char *t=cara;
int i=0;
int sum=0;
int j=0;
int m;

printf("entrer a binary number\n");
scanf("%s",&cara);
while(*t!="\0")
{
    j++;
    m=j-1;
}


for(i=0;i<j;i++)
{
    cara[i]=cara[i]*pow(2,m);
    m--;
}
int k;
for(k=0;k<j;k++)
{
    sum=sum+cara[i];
}
printf("%d",sum);
}

1 Ответ

2 голосов
/ 09 июля 2019

Первая ошибка здесь:

while(*t!="\0")

Вы должны использовать одинарные кавычки для символов - как while(*t!='\0'). Чтобы сделать это проще, вы можете просто написать while(*t).

Помимо этой проблемы также обратите внимание, что вы никогда не обновляете t. Вам нужно добавить ++t; внутри цикла.

Вторая ошибка здесь:

cara[i]=cara[i]*pow(2,m);

Символы '0' и '1' do not имеют целочисленные значения, равные нулю и единице, поэтому расчет выполнен неверно. Символ '0' имеет целочисленное значение 48, а символ '1' имеет целочисленное значение 49 (см. https://da.wikipedia.org/wiki/ASCII), поэтому результат будет полностью неверным.

Чтобы получить более правильный расчет, вам нужно:

cara[i] = (cara[i] - '0') * pow(2,m);

Однако, плохая идея сохранять эти промежуточные результаты обратно в char. char не может содержать значения выше 127 (или 255, если char не подписано), поэтому у вас скоро будет целочисленное переполнение.

Как правило, нет необходимости сохранять эти промежуточные результаты, и нет необходимости в pow, так как вы можете просто умножить на 2 для каждой двоичной цифры.

Попробуй так:

#include <stdio.h>

int main(void) {
    char *bin_str = "11001";
    unsigned result = 0;
    while (*bin_str)
    {
        result *= 2;
        result += *bin_str == '1' ? 1 : 0;
        ++bin_str;
    }
    printf("%d\n", result);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...