我正在用 C++ 编写代码来输出斐波那契数列,这很简单,但是由于我是编程新手,所以我正在考虑控制的方法
我想知道是否有一种方法可以控制输出何时出现而不包括处理时间(例如,如果处理我的输入需要 .0005 秒,我希望它在 1 秒而不是 1.0005 秒内重复输出).
我也想知道是否有办法让它输出(比如 1),然后让它等我按回车键,这将使它输出第二部分(2)。
此外,如果有任何其他关于如何控制输出的建议,我将不胜感激。
最佳答案
如果您使用的是 Windows,一种快速暂停的方法是调用 system("pause");
但是,这并不是一种非常专业的处理方式。
使用 std 命名空间暂停的方法是这样的:
cout << "Press Enter to continue . . ." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
至于您的主要问题...如果您只是处理向用户输出的文本,他们不可能注意到五微秒的延迟。但是,如果您的间隔长度波动数十毫秒,他们会注意到。这就是为什么 sleep(..)
函数有时会失败。
让我们以您想要每秒输出一次斐波那契数列中的另一个数字为例。这会工作得很好:
#include <ctime>
#include <limits>
#include <iostream>
void pause() {
std::cout << "Press Enter to continue . . ." << std::endl;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
int main() {
clock_t next = clock();
int prev1, prev2, cur = 0;
for (int i = 0; i < 47; ++i) {
if (i < 2) cur = i;
else cur = prev1 + prev2;
prev2 = prev1;
prev1 = cur;
while (next > clock());
std::cout << (i+1) << ": " << cur << std::endl;
next += CLOCKS_PER_SEC;
}
pause();
return 0;
}
序列中的下一个数字在等待之前计算并准备打印,因此计算时间不会对定时输出增加任何延迟。
如果您希望您的程序在后台运行时以固定速率继续输出,您需要 look into threads .您可以将结果添加到一个线程中的队列中,而另一个线程检查结果以每秒打印一次。
关于c++ - 控制程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3078148/