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

Ошибка в программе для вывода меню - C++

Восстановить пароль Регистрация
 
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
01.03.2012, 19:46     Ошибка в программе для вывода меню #1
Нужно сделать раскрывающееся меню, но у меня даже обычное не получается.и так и сяк его кручу...вот код, может кто поможет исправить ошибки. там в конечном пункте надо было еще сделать подтверждение выхода...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "StdAfx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
    char str1[] = "Rabota s failami";
    char str2[] = "Prosmotr";
    char str3[] = "Dobavit' novyi element";
    char str4[] = "Udalit' element";
    char str5[] = "Redaktirovat' element";
    char exit[] = "Vyhod";
    
    int key=0;
    int code=0;  
    do
    {
        system("cls");
        cout<<"***"<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<"***"<<endl;
          
        
                                                
        code=_getch();
        if (code==0)
            {
            
            code=_getch();
            if (code==83) {key++;} 
            if (code==87) {key--;} 
            }
     switch (key)
        {
        case 0: cout<<"***"<<str1<<"***"<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl;break;
        case 1: cout<<str1<<endl<<"***"<<str2<<"***"<<endl<<str3<<endl<<str4<<endl<<str5<<endl;break;
        case 2: cout<<str1<<endl<<str2<<endl<<"***"<<str3<<"***"<<endl<<str4<<endl<<str5<<endl;break;
        case 3: cout<<str1<<endl<<str2<<endl<<str3<<endl<<"***"<<str4<<endl<<str5<<endl;break;
        case 4: cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<"*"<<str5<<"***"<<endl;break;
        case 5: cout<<"Y/N?";return 0;
        }
    return key;
    }
    while(code!=13);  
        
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
01.03.2012, 20:48     Ошибка в программе для вывода меню #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int _tmain(int argc, _TCHAR* argv[])
{
char str1[] = "0. Rabota s failami";
char str2[] = "1. Prosmotr";
char str3[] = "2. Dobavit' novyi element";
char str4[] = "3. Udalit' element";
char str5[] = "4. Redaktirovat' element";
 
int key=0;
 
cout<<"***"<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<"***"<<endl;
 do
  {
   cin>>key;
   switch (key)
     {
      case 0: cout<<"***"<<str1<<"***"<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl;break;
      case 1: cout<<str1<<endl<<"***"<<str2<<"***"<<endl<<str3<<endl<<str4<<endl<<str5<<endl;break;
      case 2: cout<<str1<<endl<<str2<<endl<<"***"<<str3<<"***"<<endl<<str4<<endl<<str5<<endl;break;
      case 3: cout<<str1<<endl<<str2<<endl<<str3<<endl<<"***"<<str4<<endl<<str5<<endl;break;
      case 4: cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<"***"<<str5<<"***"<<endl;break;
     default: cout<<"error"<<endl;
     }
  }while(key!=5);
Sleep(10000);// задержка в Builder-e
}
Честно говоря не понял некоторые строки вашей проги поэтому покоцал её...
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
01.03.2012, 20:58     Ошибка в программе для вывода меню #3
Сделал вот так... Честно сказать, для чего используется "StdAfx.h" я не знаю, потому убрал её )).
В итоге в main возвращается key дальше от полученного значения можно плясать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
 
int main()
{
        char str1[] = "(1) Rabota s failami";
        char str2[] = "(2) Prosmotr";
        char str3[] = "(3) Dobavit' novyi element";
        char str4[] = "(4) Udalit' element";
        char str5[] = "(5) Redaktirovat' element";
        char exit[] = "(6) Vyhod";
        char ch;
        int key=0;
        //показываем меню
        cout<<"***"<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<exit<<"***"<<endl;
        //ждем нажатия W или S
   
    
    do
    {
        ch = getch();
        system("cls");
        if (ch==83 || ch==115)
            {if ((key+1)!=7) key++;}
        else if (ch==87 || ch==119)
            {if ((key-1)>0) key--;}
        switch (key)
                {
                case 1: cout<<"***"<<str1<<"***"<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<exit<<endl;break;
                case 2: cout<<str1<<endl<<"***"<<str2<<"***"<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<exit<<endl;break;
                case 3: cout<<str1<<endl<<str2<<endl<<"***"<<str3<<"***"<<endl<<str4<<endl<<str5<<endl<<exit<<endl;break;
                case 4: cout<<str1<<endl<<str2<<endl<<str3<<endl<<"***"<<str4<<endl<<str5<<endl<<exit<<endl;break;
                case 5: cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<"*"<<str5<<"***"<<endl<<exit<<endl;break;
                case 6: cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<"*"<<exit<<"***"<<endl;break;                     
                }
        
    } while (ch!=13);
    cout << "Vi vibrali " << key << endl;
    return key;
 
}

ну и для перемещения использовать W или S (w,s), с русской раскладкой не работает
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
01.03.2012, 21:24  [ТС]     Ошибка в программе для вывода меню #4
а если делать стрелочками там кроме вот этого ничего писать не надо?
C++
1
2
3
4
if (ch==40 || ch==115)
            {if ((key+1)!=7) key++;}
        else if (ch==38 || ch==119)
            {if ((key-1)>0) key--;}
denys_l
51 / 51 / 4
Регистрация: 26.09.2011
Сообщений: 186
01.03.2012, 21:57     Ошибка в программе для вывода меню #5
Цитата Сообщение от Nevado4ka Посмотреть сообщение
а если делать стрелочками там кроме вот этого ничего писать не надо?
C++
1
2
3
4
if (ch==40 || ch==115)
            {if ((key+1)!=7) key++;}
        else if (ch==38 || ch==119)
            {if ((key-1)>0) key--;}
нет. Вот так
C++
1
2
3
4
if (ch==80)
            {if ((key+1)!=7) key++;}
else if (ch==72)
            {if ((key-1)>0) key--;}
80 - вниз
72 - вверх
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
01.03.2012, 23:31     Ошибка в программе для вывода меню #6
Чет не пойму для чего стрелочки?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <string>
#include <vector>
using namespace std;
struct menu
{
  menu* parent;
  string name;
  vector<menu*> items;
 
  menu(string name,menu* parent=NULL)
    {
    this->name=name;
    this->parent=parent;
    }
 
  ~menu()
    {
    cout<<"destroy  "<<name<<endl;
    for(unsigned i=0;i<items.size();i++)
       if(items[i]) delete items[i];
    }
 
  menu* add_item(string item_name)
   {
   menu* new_item= new menu(item_name,this);
   items.push_back(new_item);
   return  new_item;
   }
 
  void show()
   {
    for(unsigned i=0;i<items.size();i++)    cout<<items[i]->name<<endl;
   }
 
  string path()
   {
   string s=name;
   menu* pos=parent;
   for(;pos;) { s.insert(0,pos->name+"\/"); pos=pos->parent;}
   return s;
   }
};
//-------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
 menu* main_menu= new menu("main_menu");
 
 main_menu->add_item("0. item0");
 main_menu->add_item("1. item1");
 main_menu->add_item("2. item2");
 main_menu->add_item("3. item3");
 
 main_menu->items[1]->add_item("0 sub item 1.1");
 
    main_menu->items[1]->items[0]->add_item("0 sub sub item 1.1.1");
 
 main_menu->items[1]->add_item("1 subitem 1.2");
 
 menu* current_menu;
 
 current_menu= main_menu;
 cout<<"\/"<<current_menu->path()<<endl;
 current_menu->show();
 
 char key;
 unsigned index;
 string str;
 
 for(;;)
   {
    cin>>str;
    key=str[0];
 
    if(isdigit(key))
     {
     index= atoi(str.c_str());
 
     if(index<current_menu->items.size())
        {
        current_menu= current_menu->items[index];
        cout<<"\/"<<current_menu->path()<<endl;
        current_menu->show();
        }
     else cerr<<"error"<<endl;
     }
    else
     if(str=="exit"||str=="quit")  break;
     else
          if(str=="back" && current_menu->parent)
            {
            current_menu= current_menu->parent;
            cout<<current_menu->path()<<endl;
            current_menu->show();
            }
   }
delete  main_menu;
cout<<"...";
Sleep(10000);
}
Yandex
Объявления
01.03.2012, 23:31     Ошибка в программе для вывода меню
Ответ Создать тему
Опции темы

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