Есть символьный массив, в которые вводятся числа 0 и 1. Нужно с помощью функции перевести элементы символьного массива из двоичной системы счисления в 10-ную.
Код:
#include <stdio.h>
#include <stdlib.h>
# include <math.h>
int sys2to10(char str);
int main() {
int result = sys2to10(str);
printf("Введите последовательность:");
char str[10] = {0};
scanf("%6s", str);
printf("%d", result);
return (0);
}
int sys2to10(char str) {
int psum = 0;
for(int i = 6; i > 0; i --) {
psum += (int str[i] * (pow(2, i-1)));
}
return (psum);
}
Но компилятор ругается, не могу понять в чём ошибка.
Ощущение, что вы начитались какой-то фантастики о путешествиях во времени - сначала вычисляете, потом спрашиваете, что вычислять...
Сначала вычисляем неизвестно что (str - неизвестно!) "Шофер, домой! - а где вы живете? - не твое дело!"...
int result = sys2to10(str);
Потом просим ввести последовательность
printf("Введите последовательность:");
Наконец, объявляем str и читаем...
char str[10] = {0};
scanf("%6s", str);
И выводим нечто, вычисленное не пойми из чего...
printf("%d", result);
Вобщем, вот ваш код. Без проверок и защит от дурака.
#include <stdio.h>
#include <stdlib.h>
# include <math.h>
int sys2to10(char * str);
int main()
{
char str[10] = {0};
printf("Введите последовательность: ");
scanf("%6s", str);
int result = sys2to10(str);
printf("%d", result);
}
int sys2to10(char * str)
{
int psum = 0;
for(int i = 0; str[i]; i++)
psum = psum*2 + (str[i] - '0');
return psum;
}
Данное объявление функции
int sys2to10(char str);
является некорректным, так как в функцию передается строка, а не символ.
Поэтому функцию следует объявить как
int sys2to10( const char *str );
В функции используется, не понятно, откуда взявшееся магическое число 6:
for(int i = 6; i > 0; i --) {
^^^
Данное выражение
psum += (int str[i] * (pow(2, i-1)));
синтаксически неверное,
В функции main вы сначала должны объявить и инициализировать символьный массив str и лишь затем вызывать функцию
int result = sys2to10(str);
Функция может выглядеть следующим образом, как показано ниже в демонстрационной программе, написанной на C.
#include <stdio.h>
int sys2to10( const char *s )
{
const int Base = 2;
int result = 0;
for ( ; *s; ++s )
{
result = Base * result + ( *s - '0' );
}
return result;
}
int main(void)
{
const char *s = "1101";
printf( "%d\n", sys2to10( s ) );
return 0;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости