想要将二进制转成十进制可是遇到瓶颈,目前只能如图方法解决,请问该如何修改

img

#include <stdio.h>
int main() {
 char b[40];
 int d=0,i=0,p=1;
 scanf("9%31[01]",b);
 while (1) {
  if (!b[i]) break;
  if (b[i]=='1') d+=p;
  p<<=1;
  i++;
 }
 printf("%d",d);
 return 0;
}