You would do better to take the input as a string, and starting from the end of that string add the place values for the 1 digits.
%u interprets a decimal string as an integer, you are then trying to interpret the decimal representation of the resultant integer value as binary. Not only is that confusing and somewhat irrational, it will limit you to 10 binary digits.
Consider this:
/* binary to integer */
#include <stdio.h>
#include <string.h>
int main()
{
int pv = 1 ;
int value = 0 ;
char bin[33] ;
printf("Enter binary number: ");
scanf("%32s", bin ) ;
for( int i = strlen( bin ) - 1; i >= 0; i-- )
{
if( bin[i] == '1' )
{
value += pv ;
}
pv *= 2 ;
}
printf( "%d\n", value ) ;
return 0 ;
}
Note also that what is happening here is not a conversion to decimal, but rather conversion to integer. All values are stored internally in binary, it is only decimal if you choose to output a decimal string representation of the integer value.
A potentially more efficient version of the above that exploits the internal binary representation of integers is:
/* binary to integer */
#include <stdio.h>
#include <string.h>
int main()
{
int pv = 1 ;
int value = 0 ;
char bin[33] ;
printf("Enter binary number: ");
scanf("%32s", bin ) ;
for( int i = strlen( bin ) - 1; i >= 0; i-- )
{
if( bin[i] == '1' )
{
value |= pv ;
}
pv <<= 1 ; ;
}
printf( "%d\n", value ) ;
return 0 ;
}