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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
miragex
1 / 1 / 0
Регистрация: 11.07.2012
Сообщений: 138
#1

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

19.01.2013, 00:22. Просмотров 480. Ответов 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,
строка ввода данных не пропадает.
как сделать чтобы строка после ввода значения исчезала

Спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 00:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Меню в консоли - Ввод данных (C++):

Ввод данных в консоли - C++
При вводе в консоль названия элемента, должна выводиться его плотность. Когда ввожу имена элементов первой структуры ( Fluids) и при...

Перевод каретки и ввод данных в консоли - C++
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: #include &lt;iostream&gt; #include &lt;cstdio&gt;...

Перевод каретки и ввод данных в консоли - C++
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: #include &lt;iostream&gt; #include &lt;cstdio&gt;...

Как прекратить ввод данных из консоли - C++
Программа должна считывать пары точек (x, y), но заранее не известно количество пар. Как сделать так, чтобы ввод прекратился после ввода...

Ввод в консоли - C++
Возникла проблема: необходимо при вводе в консоли сделать так, чтобы при нажатии enter вводил значение по умолчанию. Также необходима...

Ввод чисел в консоли - C++
как сделать ввод n целых чисел на с++, простая штука, но че то не допираю, и реально ли это если не дано n, числа вводятся через пробел

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Fareiro
15 / 15 / 1
Регистрация: 06.12.2012
Сообщений: 132
19.01.2013, 02:12 #2
после ввода данных код выполняется нормально? если да - дописать туда system("cls"); как вариант
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 02:12
Привет! Вот еще темы с ответами:

Ввод с консоли в *char - C++
Как ввести строку с консоли в переменную типа *char? Вот такой код не работает #include &lt;iostream.h&gt; char *string; void...

Ввод текста в консоли - C++
Здравствуйте. Задание: Ввести текст, поменять местами 5й и 7й символы. #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #define SIZE...

Ввод строки с консоли - C++
Как ввести строку &quot;text&quot; ( char s = &quot;text&quot;; ) с консоли? #include&lt;stdio.h&gt; #include&lt;string.h&gt; void Del(char *s) { ...

потоковый ввод с консоли - C++
Всем привет! Нужно в цикле вводить строки с консоли, пока пользователю не надоест. Вопрос: как пользователю завершить ввод? Такой код: ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru