c++编程问题.程序1和程序2只是s的赋值位置不同。运行结果也不同了这是为什么啊?不是一样的吗

程序1:
#include <iostream>
using namespace std;
int main()
{
int C,n,s=0;
cin>>C;
while(C--)
{
cin>>n;
while(n!=0)
{
if(n%2==0)
n=n/2;
else
{
n--;
s++;
}
}
printf("%d\n",s);

}
return 0;
}
程序2:
#include <iostream>
using namespace std;
int main()
{
int C,n,s;
cin>>C;
while(C--)
{
s=0;
cin>>n;
while(n!=0)
{
if(n%2==0)
n=n/2;
else
{
n--;
s++;
}
}
printf("%d\n",s);

}
return 0;
}
程序2中while循环弊猛敏中每次都会把s变为0;程序1中知锋每次s的值不初始化为0,所以输出不一样。。
你可以调试看租枝看。。。