为什么一个循环在C++中这样做
Why is a loop doing this in C++
好吧,初学者,放松。谢谢
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int x = 0;
bool while1 = true;
while (while1)
{
cout << x << "n";
sleep(200);
if (x < 10)
{
while1 = true;
}
else if (x >= 10)
{
while1 = false;
}
x = x+1;
}
cin.get();
}
好吧,所以我不明白为什么如果我有if语句检查x<10之前我在x上加了1…请解释一下。
操作顺序为:
- 1( 如果3(发现x>=10(如果
while1
为false(,则停止循环 - 2( 打印输出x
- 3( 在此处检查x是否>=10,如果是则将
while1
设置为false - 4( 增量x
当x为9时,我们进行如下操作:
- 不要停止循环(
while1
为true( - 打印9
- x尚未>=10,请将
while1
设置为true - x增加到10
- 不要停止循环(
while1
为真( - 打印10
- x现在>=10,将
while1
设置为false - x增加到11
- 由于
while1
设置为false,我们停止循环
所以,x在10的时候就会打印出来。问题是,在你检查和执行检查的方式中,你在停止之前做了太多的循环。
解决这个问题的一种方法是
while (x < 10)
{
cout << x << "n";
Sleep(200);
x = x+1;
}
现在,循环将不会在x为10的同一次传递中执行,也不会在之后立即执行。
更好的是:
for (int x = 0; x < 10; ++x)
{
cout << x << "n";
Sleep(200);
}
这更清楚地说明了它在x的递增值上循环的意图。
程序获取x
到10
,因为x = x + 1
发生在if
之外
因此,在循环的一次执行过程中,它将进行检查,然后如果x小于10,它将使while1
为真。否则使while1
为假。之后不管怎样都会增加x
。然后,如果while
为真,则重复该过程。
else if (x >= 10)
{
while1 = false;
}
x = x+1;
我理解这个问题:为什么x会达到10这是正确的吗?
当while1设置为false时,while循环不会立即退出。当然,在退出循环后,x将等于10,因为在检查后,x增加了,所以在这个代码段之后,x实际上将是11。
如果您不想在x>=10之后打印x,请在增加x之后进行检查。
#include <iostream>
#include <windows.h>
using namespace std;
int main(
{
int x = 0;
bool while1 = true;
while (while1)
{
cout << x << "n"
x++;
Sleep(200);
if (x < 10)
{
while1 = true;
}
else if (x >= 10)
{
while1 = false;
}
}
cin.get();
}
如果循环中x>=10,那么当循环在while循环中达到10时,循环将再次迭代
您正在做的是:
- 要求程序打印x的值
- 检查x是否小于10
- 如果是,请将while1设置为true。Else将while1设置为false
- 将x的值增加1(无论while1为true还是false(
- 在第10个循环开始时,x=9
- 打印9
- 由于x仍然小于10,而1仍然为真
- 在第10个循环结束时,x=10,while1=true
你的程序开始另一个循环,while1=真正的
- 在第11个循环开始时,x=10
- 打印10
- 由于x现在等于10,而le1设置为false
- 在第11个循环结束时,x=11,while1=false
最好的做法是只使用
int x = 0;
while(x < 10)
{
cout << x << endl; //this way your program will only print 0 to 9
sleep(200);
x++; //this is the same as x = x+1
}
如果你坚持使用自己的代码,我想你可以用break代替while1=false;
else if (x >= 10)
{
break;
}
断裂;如果x>=10,将允许您突破while循环,而不增加x或再次通过循环。。。
应该是安全的,除非你要在while循环中做更多的事情。。。
相关文章:
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- FlatBuffers C++ reinterpret_cast访问实际上是未定义的行为吗?这样做实际上可以吗?
- 为什么 arr[i++] 与 arr[i]++ 会这样做?
- ideone.com 为什么要这样做?
- std::字符串 's' 通过 '&s[0]' 转换为字符* - 如何/为什么这样做?
- 函数如何在不这样做的情况下在新线程上运行"as if"?
- 为什么在接受输入后循环退出时不会这样做
- 为什么我不能在未链接的 DLL 上调用方法,但可以这样做?C++
- 如何强制呼吁移动构造函数,为什么要这样做
- 我是否必须锁定我刚刚枚举的向量,或者我只在更改它时才这样做?
- 为什么指针不能指向张贴增量,而可以这样做才能预先递增
- C++子字符串为什么这样做
- 为什么循环结束时不这样做?
- 即使明确要求这样做,在qformlayout中动态创建的Qwidget也没有框架
- C++循环、作用域和堆栈(为什么这样做?
- C++为什么要这样做
- C++循环在 EOF 之后继续运行时这样做
- 从用户应用程序访问环0模式(以及Borland允许这样做的原因)