Двойная буферизация и печать - PullRequest
0 голосов
/ 28 ноября 2018

У меня проблемы с настройкой других основных функций для работы с двойным буфером.

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

Он появляется на долю секунды, но затем сразу исчезает.В этих ситуациях перемотайте (stdin) и getchar ();решает эту проблему, но для этого кода, кажется, ничего не работает.

Пожалуйста, помогите.

#define _CRT_SECURE_NO_WARNINGS
#include "conioex.h"
#include "DblBuffer.h"

enum // 
{
    NEW_GAME = 20,
    LOAD,
    EXIT,
    MAX_NUM
};

void main (void)
{
    DblBuffer db;
    int Cursor_X, Cursor_Y; // cursorlocation
    bool Key_flag = false;  // pressandtrue
    int type = NEW_GAME;    // type
    Cursor_X = 20;
    Cursor_Y = 1;
    int flag = 1;
    while (flag)
    {
        for (int i = 1; i <= 3; i++)
        {
            db.setCursorPos(20,i);
            db.write(" ");
        }
        db.setCursorPos(25,1);
        db.write("New Game\n");
        db.setCursorPos(25,2);
        db.write("Load\n");
        db.setCursorPos(25,3);
        db.write("Exit\n");

        if (inport(PK_DOWN))
        {
            if (Key_flag == false)
            {
                Cursor_Y = Cursor_Y + 1;
                type = type + 1;
                Key_flag = true;
            }
        }
        else if (inport(PK_UP))
        {
            if (Key_flag == false)
            {
                Cursor_Y = Cursor_Y - 1;
                type = type - 1;
                Key_flag = true;
            }
        }
        else if (inport(PK_ENTER))
        {
            flag = 0;
            break;
        }
        else
        {
            Key_flag = false;
        }

        if (Cursor_Y < 1)
        {
            Cursor_Y = 1;
        }
        if (Cursor_Y > 3)
        {
            Cursor_Y = 3;
        }

        if (type < NEW_GAME)
        {
            type = NEW_GAME;
        }
        if (type >= MAX_NUM)
        {
            type = MAX_NUM - 1;
        }

        db.setCursorPos(Cursor_X, Cursor_Y);
        db.write("→");
        db.swap();
    }

    if(type == NEW_GAME)
    {
        printf("making a new game");
    }
    if (type == LOAD)
    {
        printf("will load");
    }
    if (type == EXIT)
    {
        printf("goodbye");
    }

    rewind(stdin);
    getchar();
}

1 Ответ

0 голосов
/ 28 ноября 2018

Что касается вашей проблемы, то "тогда оно сразу исчезает", я предполагаю, что окно консоли быстро исчезает?

Это потому, что программа завершается.

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

...