问一下我这个错在哪里,该怎么改(做得不好,别骂)

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。

输入格式:
输入在一行中给出32位二进制字符串。

输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。

输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114

问一下我这个错在哪里,该怎么改(做得不好,别骂)
#include
#include
int main()
{
int sum=0,y=0;
char f[32];
int a[4];
for(int i=0;i<=32;i++)
{
scanf("%c",&f[i]);
}
for(int x=0;x<4;x++)
{
for(int i=x*8;i<=32;i++)
{
sum=sum+f[i]*pow(2,7-y);
y++;
if((i+1)%8==0)
{
a[x]=sum;
break;
}
}
y=0;sum=0;
}
for(int x=0;x<4;x++)
{
printf("%d.",a[x]);
if(x==3)
printf("%d",a[x]);
}
}

这个代码里面的错误比较多呀,循环控制变量越界、输出控制条件和逻辑不完整等等

供参考:

#include<stdio.h>
int main()
{
    char a[33];
    int  i;
    scanf("%s",a);
    int sum=0;
    for(i=0;a[i]!='\0';i++)
    {
         if(i!=0 && i%8==0)
         {
              printf("%d.",sum);
              sum=0;
         }
         sum = sum * 2 + a[i] - '0';
    }
    printf("%d\n",sum);
    return 0;
}