Возникли проблемы с функцией сна внутри цикла в C - PullRequest
0 голосов
/ 03 апреля 2019

Я пишу код на C, и функция сна не работает так, как я хочу.

for(seq_n = 1; seq_n <= 3; seq_n++){
    printf("Sequence %d:\n", seq_n);
    for(val_n = 1; val_n <= 5; val_n++){
        seq[val_n] = rand() % 9;
        printf(" %d", seq[val_n]);
    }

    sleep(5);

    printf("\nType the Sequence: \n");
    for(val_n = 1; val_n <= 5; val_n++)
        scanf("%d", &seq_user[val_n]);
        checkSequence(seq, seq_user);
}

Когда я запускаю программу, сначала появляется «Sequence (number)», а затем только послеЧерез 5 секунд будет напечатана последовательность и фраза «Введите последовательность», причем это происходит во всем цикле.

Я хочу, чтобы «Последовательность (номер)» появлялась одновременно с последовательностьюи только через 5 секунд программа попросит набрать последовательность.Кроме того, я хотел бы знать, как заставить последовательность исчезнуть через 5 секунд.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Если вы печатаете на терминал, stdout буферизуется в строке, т.е. вывод накапливается во внутреннем буфере до тех пор, пока вы не напечатаете \n.(Если вывод не идет на терминал, stdout буферизируется блоком, поэтому он будет выводить только что-нибудь, когда буфер заполнится.)

Чтобы очистить буфер (т.е. немедленно вывести его содержимое), вам нужно

fflush(stdout);

до вашего sleep вызова.

Чтобы очистить текущую строку, вы можете попробовать

printf("\033[2K");  // erase the line the cursor is in

Я предполагаю, что вы используете обычный Unixэмулятор терминала;эти escape-последовательности зависят от системы.

1 голос
/ 03 апреля 2019

Изменить на:

printf("\n");
sleep(5);
printf("Type the Sequence: \n");

Вывод буферизуется до новой строки.

...