关于手动实现POW函数数值不准的有关问题

关于手动实现POW函数数值不准的问题
各位仁兄,请帮忙查看为何如下代码实现POW函数会报错。我输入2^3 结果是4..I为统计次数,谢谢。
#include <stdio.h>
int main(void)
{
int x,y,i;
scanf("%d %d",&x,&y);
for (i=1;i<y;i++)
{
x=x*x;
++i;
}

printf("%d\n",x);
printf("%d\n",i);

return 0;
}

------解决方案--------------------
int main(void)
{
int x,y,i;
scanf("%d %d",&x,&y);
int tmp = x;
for (i=1;i<y;i++)
{
x *= tmp;
//++i;
}

printf("%d\n",x);
printf("%d\n",i);

return 0;
}

------解决方案--------------------
问题有3处:
1:循环i要从0开始
2:循环中最后i不需要再自增;
3:需要再定义一个结果变量,因为x循环一遍以后值已经改变,不是初始的那个数了,结果就不对了