我正在编写一个用C ++输出fibonacci系列的代码,这很简单,但由于我是编程的新手,我正在考虑控制方法
我想知道是否有办法控制输出何时没有处理时间的时间(例如,如果处理我的输入需要0.0005秒,我希望它在1秒而不是1.0005秒内重复输出)。
我也想知道是否有办法让它输出(比如1)然后让它等我输入,这将使它输出第二部分(2)。
另外,我很欣赏有关如何控制输出的任何其他建议。
答案 0 :(得分:2)
如果您使用的是Windows,那么暂停的一种方法就是拨打system("pause");
这不是一种非常专业的做事方式。
使用std命名空间暂停的方法是这样的:
cout << "Press Enter to continue . . ." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
至于你的主要问题......如果你只是处理文本输出给用户,他们就不可能注意到5微秒的延迟。但是,他们可以注意到你的间隔长度是否会波动几十毫秒。这就是sleep(..)
函数有时失败的原因。
让我们举一个想要在Fibonacci序列中每秒输出一次数字的例子。这样可以正常工作:
#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。您可以将结果添加到一个线程中的队列中,而另一个线程则检查每秒打印一次的结果。