这个程序,我在visual studio.NET里运行:
#include <iostream>
using namespace std;
void main()
{
const int num=10;
int interval;
int a[num];
for(int i=0;i<num;i++)//第二次将i改为j
a[i]=i+1;//第二次将i改为j
cout<<"please input the interval:";
cin>>interval;
for(int i=0;i<num;i++)//第二次将i改为j
cout<<a[i]<<",";//第二次将i改为j
cout<<endl;
int k=1;
int i=-1;
while(1)
{
for(int j=0;j<interval;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num)break;
cout<<a[i]<<",";
a[i]=0;
k++;
}
cout<<"\nNo."<<a[i]<<"boy've won.\n";
}
运行结果:
please input the interval:8
1,2,3,4,5,6,7,8,9,10,
8,0,0,0,0,0,0,0,0,
No.8boy've won.
Press any key to continue
(这个结果是不正确的,编译时出现警告:speed.cpp(22) : warning C4288: 使用了非标准扩展 : “i” : 在 For 循环中声明的循环控制变量用在了 For 循环范围外;它与外部范围内的声明冲突
speed.cpp(17) : 使用“i”的定义
speed.cpp(12) : 忽略“i”的定义)
将程序改一下:
#include <iostream>
using namespace std;
void main()
{
const int num=10;
int interval;
int a[num];
for(int j=0;j<num;j++)
a[j]=j+1;
cout<<"please input the interval:";
cin>>interval;
for(int j=0;j<num;j++)
cout<<a[j]<<",";
cout<<endl;
int k=1;
int i=-1;
while(1)
{
for(int j=0;j<interval;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num)break;
cout<<a[i]<<",";
a[i]=0;
k++;
}
cout<<"\nNo."<<a[i]<<"boy've won.\n";
}
运行结果:
please input the interval:8
1,2,3,4,5,6,7,8,9,10,
8,6,5,7,10,3,2,9,4,
No.1boy've won.
Press any key to continue
我记得for语句的第一个表达式中声明的变量,其作用域在该语句内。for语句结束后,在它其间定义的i就应该释放掉了,那么我在for语句结束之后再定义一个i,为什么会产生冲突呢???
盼大侠们给予回答,谢谢!!!