Есть символьный массив, в которые вводятся числа 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;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую RapidjsonВозникла нужда изменять строку
Хочу вас спросить, я недавно увидел на википедии, что Kaspersky написан на c++, скажите пожалуйста, как они создали интерфейс? WinApi, Qt, или что-то другое?
В классе ObjectInput есть метод available(), который, как написано в java docs, возвращает количество байт, доступных для чтения без блокировкиВ классе FileInputStream...
При свайпе вправо не отображается иконка, хотя при свайпе влево она естьЯ смог пофиксить это, деля итоговое число на 10, но иконка получается...