Посмотрите на эту строку:
while(bin != "\n");
Даже если бы ;
не было, условие никогда бы не стало истинным, просто потому, что вы не можете сравнивать строки подобным образом. Это должно было быть
while( strcmp(bin, "\n") != 0 )
Но, глядя на то, что, очевидно, должно было быть телом цикла, вы увеличиваете не указатель bin
, а целое число i
. Итак, наконец, ваше состояние должно быть
while( strcmp(bin+i, "\n") != 0)
или просто
while( bin[i] != '\n' )
... и без `; 'конечно
И, как правильно упомянул @barmar, если вы вызываете binToDec()
со строкой, которая вообще не содержит перевода строки, у вас все равно будет бесконечный цикл. Так как bin
должен состоять только из '0'
и '1'
, я бы предложил:
while( bin[i] == '0' || bin[i] == '1' )
или, если вы хотите поддерживать «отформатированные» двоичные строки (например, с пробелом после каждых 8цифры)
while( bin[i] != '\0' && bin[i] != '\n' )
ваше тело цикла уже подойдет для этого, поскольку вы ничего не делаете, если bin[i]
не является ни '0'
, ни '1'