Управление выводом программы - PullRequest
0 голосов
/ 20 июня 2010

Я пишу код для вывода ряда Фибоначчи на C ++, который достаточно прост, но, поскольку я новичок в программировании, я рассматриваю способы управления

Мне было интересно, есть ли способ контролировать время, когда выходы выходят без учета времени обработки (например, если для обработки моего ввода требуется .0005 секунд, и я хочу, чтобы он повторил вывод в течение 1 секунды, а не 1.0005 секунд ).

Мне также интересно, есть ли способ просто сделать так, чтобы он выводил (скажем, 1), а затем подождать, пока я нажму enter, что заставит его вывести вторую часть (2).

Кроме того, я был бы признателен за любые другие предложения о том, как контролировать вывод.

1 Ответ

2 голосов
/ 20 июня 2010

Если вы работаете в 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;
}

Следующее число в последовательности вычисляется и готово к печати до ожидания, поэтому время вычисления не добавит никакой задержки к выходу по времени.

Если вы хотите, чтобы ваша программа продолжала выводить данные с фиксированной скоростью, пока ваша программа работает в фоновом режиме, вам нужно просмотреть потоки .Вы можете добавить результаты в очередь в одном потоке, в то время как другой поток проверяет результаты печати один раз в секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...