C语言问题。编写程序,输入一个长整型正数,判断该数是几位数

源程序:
#include<stdio.h>
#include<math.h>
main()
{
long int x;
double y;
int z=1,i=0;
printf("输入长整型正数:");
scanf("%ld",&x);
do{
z=z*10;
y=x/z;
i++;
}while(y>0);
printf("位数:%d\n",i);
}

--------------
这个程序有错吗?如果没错的话,我想问下为什么是while(y>0)?不是y>1?如果错了要怎么改。
#include<stdio.h>
#include<math.h>
main()
{
long int x;
int i=0;
printf("input:");
scanf("%ld",&x);
do{
x=x/闭谨10;
i++;
}while(x>肢态差0);
printf("the nubmer is:%d\n",i);
}
这样就正确了,你自己运行下^_^
注: 除法运算符“/”:双目运算具有左结合性。参与运算量均为整型时,历皮结果也为整型,舍去小数。例如,你输入123456 先执行123456/10 结果为12345 在继续执行12345/10 结果为1234...........最后为1/10 结果为0 不满足条件x>0 结束循环,打印i的值^_^
只亮搜有当y>0时,接受的x的值才可以把每一位都除一遍,如果y>1的话,那么x中的数还模键培有一位没算,所以最后的位数旦唯会少一位。
楼上说的有问题,x怎么会变?变的是z,z从开始10变成100,1000,10000...,x是长整形,只会使y无限趋近于0,但y还是一直大于零0。当y小于0时循环停止,也就是说输入19840902,循环8次以后,y小铅和于0,循环停止磨激衫,此时i加7次,瞎腔输出8
复杂了,只要x=x/10,当x等于0时停止
32 位··值域·在 无符号 0-4294967295有符号在-21483648——2146348