C++中For循环和while循环中的变量问题

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

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

xmczzxy - 。。。

推荐来自: wuduojiawml Joey

其实在循环前面加上个if来判断的话,会轻松很多。不过既然题主要挑战极限,我们试着只用while走一个
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,这个循环会一直循环下去,也就是死循环
}
 

要回答问题请先登录注册