C++中For循环和while循环中的变量问题
1.
之前写好的一个小程序,今天复习的时候想改的更好一点,结果一改发现想加进去的功能似乎只用while循环做不到,来这问问有没有人能实现。括号里的是后加的功能.
首先是伪码:

然后是代码:

问题就出在,要把两个数字之间的数输出的话,在输出完的时候就必然是只差一了,这时候最后的v1==v2就一定是能判定成功的(因为要想终止循环体,就必须要有++v1,这个就会破坏后面的判断)。感觉这是”全局变量“引起的问题,如果循环体内的变量就只能用在循环体内,那么判断条件就好写很多了。。。。
2.
for循环和while循环中的变量是"全局变量"还是”局部变量“?
伪代码:
2
后是代码:
这样验证有没有什么问题?
——————————————————————————————————————————我是分割线
补充图1
之前写好的一个小程序,今天复习的时候想改的更好一点,结果一改发现想加进去的功能似乎只用while循环做不到,来这问问有没有人能实现。括号里的是后加的功能.
首先是伪码:

然后是代码:

问题就出在,要把两个数字之间的数输出的话,在输出完的时候就必然是只差一了,这时候最后的v1==v2就一定是能判定成功的(因为要想终止循环体,就必须要有++v1,这个就会破坏后面的判断)。感觉这是”全局变量“引起的问题,如果循环体内的变量就只能用在循环体内,那么判断条件就好写很多了。。。。
2.
for循环和while循环中的变量是"全局变量"还是”局部变量“?
伪代码:


后是代码:

——————————————————————————————————————————我是分割线
补充图1

1 个回答
xmczzxy - 。。。
推荐来自: wuduojiawml 、Joey
int main()
{
int v1=0, v2=0;
std::cin >> v1 >> v2;
std::cout << "the range is " << std::endl;
bool meet=false;
while (v1==v2 && meet==false)
{ //如果v1,v2一开始相等,其他3个while循环都不会运行
std::cout << "error" << std::endl;
meet=true;
}
while ((v1-v2==1 || v2-v1==1) && meet==false)
{ //如果v1,v2相差1,其他三个循环也不会运行
meet=true;
std::cout << "error2" << std::endl;
}
while (v1+1<v2) //如果v2>v1+1,其他三个循环也不会运行,v1=v2-1时结束循环
std::cout << ++v1 << std::endl;
while (v1>v2+1) //同上,只是这次是v1>v2+1
std::cout << ++v2 << std::endl;
}
验证全局变量的那段代码懒的看了,实在复杂。就这么说结论吧(以下代码都在同一个程序里):
int a;
int main()
{
for(; a<10;a++)
// a是全局变量, 因为你声明a就是在全局里,循环结束后a=10
for(int b=0; b<10; b++)
// 这里的b是局部的,因为你是在for循环里声明b的,当for循结束了,这个b也就不存在了
for(int a=0; a<10; a++)
// 这里a还是局部的,并且和全局变量里的a并不是同一个变量,只是名字相同,于是程序里存在全局变量a和局部变量a两个变量
// 你在循环里对a操作,改变的只是局部变量a,全局变量a不受影响
// 全局变量a可以用域操作符::a得到
for(int a=0; a<10; a++)
for (int a=0; a<10; a++)
// 这种情况正常人都不会去写,不过按照就近原则,a是第二个for循环里的局部变量
// 在同一个范围(scope)里,同一个名字的变量只能有一个,上面的例子里允许同名变量存在,是因为它们的scope不一样
while (a<20)
a++
// a是全局的
while (int a=1)
// 每次循环都重新声明了一个局部变量a,一次循环后这个a又消失了,因为a>0,这个循环会一直循环下去,也就是死循环
}