在 while 循环中使用两个时间值。当条件不再为 1 时,while 循环不会停止。C++
Using two time values in while loop. The while loop doesn't stop when condition no longer 1. C++
即使其中一个值变为 'greater than' 并且条件从 1
变为 0
。
我的 while 循环没有停止
在 while 循环开始之前,我现在以毫秒为单位设置时间。 milliseconds_now
我还设定了一个五秒后的时间。 milliseconds_then
我在 while 循环中有 (milliseconds_now < milliseconds_then)
。它应该只有 1
五秒钟。我还在循环中打印出 (milliseconds_now < milliseconds_then)
,它在五秒后从打印“1”变为打印“0”。
我希望循环在五秒后停止。相反,它会继续。
这是我在 运行 五秒钟时在终端中看到的内容。它一直在循环。
1644097691885 1644097692070
1
1644097691935 1644097692070
1
1644097691986 1644097692070
1
1644097692036 1644097692070
1
1644097692086 1644097692070
0
1644097692136 1644097692070
0
1644097692186 1644097692070
0
1644097692236 1644097692070
0
1644097692287 1644097692070
0
1644097692337 1644097692070
0
1644097692387 1644097692070
0
1644097692437 1644097692070
代码。
#include <iostream>
#include <chrono>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace std::chrono;
auto now = high_resolution_clock::now();
auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
auto milliseconds_then = milliseconds_now + 5000;
int main() {
while (milliseconds_now < milliseconds_then) {
auto now = high_resolution_clock::now();
auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
cout << milliseconds_now << " " << milliseconds_then << "\n";
cout << (milliseconds_now < milliseconds_then) << "\n";
usleep(50000);
};
};
循环内的 milliseconds_now 与 while 循环中测试的 milliseconds_now 不同。改成
while (milliseconds_now < milliseconds_then) {
auto now = high_resolution_clock::now();
milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
cout << milliseconds_now << " " << milliseconds_then << "\n";
cout << (milliseconds_now < milliseconds_then) << "\n";
usleep(50000);
};
为什么?你在循环内声明了一个新变量,编译器通常会警告你。
即使其中一个值变为 'greater than' 并且条件从 1
变为 0
。
在 while 循环开始之前,我现在以毫秒为单位设置时间。 milliseconds_now
我还设定了一个五秒后的时间。 milliseconds_then
我在 while 循环中有 (milliseconds_now < milliseconds_then)
。它应该只有 1
五秒钟。我还在循环中打印出 (milliseconds_now < milliseconds_then)
,它在五秒后从打印“1”变为打印“0”。
我希望循环在五秒后停止。相反,它会继续。
这是我在 运行 五秒钟时在终端中看到的内容。它一直在循环。
1644097691885 1644097692070
1
1644097691935 1644097692070
1
1644097691986 1644097692070
1
1644097692036 1644097692070
1
1644097692086 1644097692070
0
1644097692136 1644097692070
0
1644097692186 1644097692070
0
1644097692236 1644097692070
0
1644097692287 1644097692070
0
1644097692337 1644097692070
0
1644097692387 1644097692070
0
1644097692437 1644097692070
代码。
#include <iostream>
#include <chrono>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
using namespace std::chrono;
auto now = high_resolution_clock::now();
auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
auto milliseconds_then = milliseconds_now + 5000;
int main() {
while (milliseconds_now < milliseconds_then) {
auto now = high_resolution_clock::now();
auto milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
cout << milliseconds_now << " " << milliseconds_then << "\n";
cout << (milliseconds_now < milliseconds_then) << "\n";
usleep(50000);
};
};
循环内的 milliseconds_now 与 while 循环中测试的 milliseconds_now 不同。改成
while (milliseconds_now < milliseconds_then) {
auto now = high_resolution_clock::now();
milliseconds_now = duration_cast<milliseconds>(now.time_since_epoch()).count();
cout << milliseconds_now << " " << milliseconds_then << "\n";
cout << (milliseconds_now < milliseconds_then) << "\n";
usleep(50000);
};
为什么?你在循环内声明了一个新变量,编译器通常会警告你。