Форум программистов, компьютерный форум CyberForum.ru

Меню в консоли - Ввод данных - C++

Восстановить пароль Регистрация
 
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 123
19.01.2013, 00:22     Меню в консоли - Ввод данных #1
Доброй ночи
Просьба не судить строго мой код - я только учусь!
Вот код меню:
Код
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

struct menu_code
{
    char* nameMenu;
    int data;
};

struct menu_code menu_char[] = 
{
    {"формирование символов\t\t\t",    1},
    {"длительность точки (с)\t\t\t",  400},
    {"длительность тире (с)\t\t\t",  1200},
    {"Пауза между \".\" & \"-\" одного знака\t",   400},
    {"Пауза между знаками в слове\t\t",     1200}
};
 
char* RusLocal(char* s)
{
	static char buf[500];
	CharToOem(s, buf);
	return buf;
}

int nItems  = sizeof(menu_char)/sizeof(menu_char[0]);
int iSelected;




bool ShowMenu(menu_code* MenuTable, HANDLE hOUT, int iit, bool iTrue);

int main()
{
    HANDLE hOUT = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD cPOS  = {0};
            bool iTrue;
int iit=1;
      
    while(true)
    {

        FillConsoleOutputCharacter(hOUT, ' ', 40*80, cPOS, NULL);
        SetConsoleCursorPosition(hOUT, cPOS);
        SetConsoleTextAttribute(hOUT, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                
        if(GetAsyncKeyState(VK_UP))
        {
            keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
            if(0 < iit - 1)
                iit = iit - 1;
            else
                iit = nItems;
        }
        
        if(GetAsyncKeyState(VK_DOWN))
        {
            keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
            if(iit < nItems)
                iit = iit + 1;
            else
                iit = 1;
        }
        
        if(GetAsyncKeyState(VK_RETURN))
        {
//           keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
           iTrue=true;                                  
        }
        
        ShowMenu(menu_char, hOUT, iit, iTrue);
    }
    return 0;
}

void ShowMenu(menu_code* MenuTable, HANDLE hOUT, int iit, bool iTrue) // Рисуем меню
{
        int iTrue2=0;
        printf("\n\t%s\n\n", RusLocal("М Е Н Ю"));

        for(int iItem = 1; iItem <= nItems; iItem++)
        {
            if(iItem == iit)
                SetConsoleTextAttribute(hOUT, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            else
                SetConsoleTextAttribute(hOUT, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);

            printf("%s- %d\n", RusLocal(MenuTable[iItem-1].nameMenu), MenuTable[iItem-1].data);

            if(iItem == iit)
                iTrue2 = iItem;
        }
        
        if(iTrue==true)
        {
            SetConsoleTextAttribute(hOUT, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
            iTrue = false;
            int d;                      
            printf("\n%s: ", RusLocal("Ввод данных"));                                   
            scanf("%d", &d);

            MenuTable[iTrue2-1].data = d;
        }
        
        iSelected = getch() - '0';
}
Проблема состоит в том что когда я стрелочками выбрал нужный пункт меню, нажал клавишу ENTER -> изменяю нужное мне значение -> нажал клавишу ENTER,
строка ввода данных не пропадает.
как сделать чтобы строка после ввода значения исчезала

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 00:22     Меню в консоли - Ввод данных
Посмотрите здесь:

C++ Ввод с консоли в *char
C++ Перевод каретки и ввод данных в консоли
C++ Перевод каретки и ввод данных в консоли
Как прекратить ввод данных из консоли C++
C++ Ввод предложения с консоли
Ввод чисел в консоли C++
Ввод в консоли C++
C++ Ввод данных в консоли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 130
19.01.2013, 02:12     Меню в консоли - Ввод данных #2
после ввода данных код выполняется нормально? если да - дописать туда system("cls"); как вариант
Yandex
Объявления
19.01.2013, 02:12     Меню в консоли - Ввод данных
Ответ Создать тему
Опции темы

Текущее время: 03:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru