c++ - 控制程序的输出

标签 c++ runtime

我正在用 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/

相关文章:

c++ - Qt C++初始化一个QStringList类成员

java - 对接口(interface)而不是实现进行编程 : Why is assigning the concrete implementation of an object at runtime even better?

swift - 无法将类型 'SCNView' 的值转换为 'SKView'

c++ - 无法使用 clang 交叉编译为 SPARC

c++ - 以 fstream::out 模式打开 fstream 是否会删除其当前内容?

java - 使用运行时 java 获取命令输入

在运行时 9.10 中构建的 Matlab 应用程序在运行时 9.7 中运行速度明显变慢

algorithm - O(n log n)时间和O(1)空间复杂度与O(n)时间和O(n)空间复杂度的算法

c++ - OpenMP 并行区域中的这个 std::vector push_back 会导致错误共享吗?

c++ - 如何在 Magick++ 中以灰度格式写入图像