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

Меню на C++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что тут не так? http://www.cyberforum.ru/cpp-beginners/thread708159.html
# include <iostream> using namespace std; int number ; int department ; char name1 ; char name2 ; char domicile ; char job ; char sender ; char diagnosis ;
C++ Вычислить значение выражения напишите вот такую вот программу на языке с++ y=|cos(|4x|)| http://www.cyberforum.ru/cpp-beginners/thread708151.html
C++ Перегрузка ввода и вывода в классе матриц
Пишу класс матриц, перегрузил ввод и вывод, ввод почему-то не работает. Вот код #include<iostream> #include<vector> using namespace std; class Matrix{ public:
C++ деление по модулю
Вообщем пишу калькулятор и наткнулся на проблемку #include "stdafx.h" #include <tchar.h> #include <stdio.h> #include <iostream> #include <string.h> #include <conio.h> #include <windows.h> #include <stdlib.h>
C++ тамагочи на C++ http://www.cyberforum.ru/cpp-beginners/thread708117.html
Всем доброго времени суток, здравствуйте! Недавно загорелся желанием написать игру на С++, решил начать с тамагочи! Полазил по форумам поискал коды,нашел только в Delphi, да синтаксис не очень отличается, но все же не то.. Может у кого есть наработки, коды, пришлите пожалуйста или порекомендуйте литературу, которая может помочь, желательно в электронном виде.. Свои знания ооп и C++ оцениваю на 2+...
C++ Не понятно пару моментов В целом программа поняла, но нужно кое-что уточнить! Зачем мы str присвоили strtok(b, " "); ? зачем в islower(str) стоит str ? И как работает это while (str = strtok(NULL," ")); ? #include <iostream> #include <cstring> int main() { char b = "So Many many: many, Words", s; char* str = strtok(b, " "); подробнее

Показать сообщение отдельно
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76

Меню на C++ - C++

25.11.2012, 07:09. Просмотров 4590. Ответов 10
Метки (Все метки)

Ув. форумчане, доброго времени суток. Прошу вас помочь. Сейчас вот пытаюсь сделать красивое меню на C++. Код меню не мой. Я выучил язык C и сейчас преступил к изучению C++. ООП. Мои знания это классы, конструкторы, деструкторы, координаты. Вот код меню, который мне скинул преподаватель (в нём 4 пункта - Новая игра, Загрузить игру, Опции, Выход):

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
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
void Stand(int x, int y, int k, char*str){
    CONSOLE_CURSOR_INFO ci; ci.bVisible=0; ci.dwSize=100; SetConsoleCursorInfo(H,&ci); // убрать мигающий курсор
    setlocale(LC_ALL,"RUS");
    COORD c;
    c.X=x; c.Y=y;
    SetConsoleCursorPosition(H,c);
    SetConsoleTextAttribute(H,k);
    cout<<str<<"\n";
}
 
void main()
{
 
    Stand(5,5,10,"Новая игра");
    Stand(5,7,2,"Загрузить игру");
    Stand(5,9,2,"Опции");
    Stand(5,11,2,"Выход");
 
    int k; // код клавиши
    int cur=1; // какой пункт выбран сейчас
    while(1){
        k=getch();
        if(k==80){
            if(cur<4){
                cur++;
                if(cur==2){
                    Stand(5,5,2,"Новая игра");
                    Stand(5,7,10,"Загрузить игру");
                }
                else if(cur==3){
                    Stand(5,7,2,"Загрузить игру");
                    Stand(5,9,10,"Опции");
                }
                else if(cur==4){
                    Stand(5,9,2,"Опции");
                    Stand(5,11,10,"Выход");
                }
            }
        }
        else if(k==72){
            if(cur>1){
                cur--;
                if(cur==3){
                    Stand(5,9,10,"Опции");
                    Stand(5,11,2,"Выход");
                }
                else if(cur==2){
                    Stand(5,7,10,"Загрузить игру");
                    Stand(5,9,2,"Опции");
                }
                else if(cur==1){
                    Stand(5,5,10,"Новая игра");
                    Stand(5,7,2,"Загрузить игру");
                }
            }
        }
        else if(k==13){
            system("cls");
            SetConsoleTextAttribute(H,12);
            if(cur==1) cout<<"Начало новой игры!\n\n";
            else if(cur==2) cout<<"Загрузка старой игры!\n\n";
            else if(cur==3) cout<<"Настройки игры!\n\n";
            else cout<<"Пока!\n\n";
            getch();
            exit(0);
        }
    }
 
}
Вот мой код, сделанный по этому шаблону(в моём тоже 4 пункта):

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*Разработать класс String, который в дальнейшем будет использоваться для работы со строками.
Класс должен содержать: 
* конструктор по умолчанию, позволяющий создать строку длиной 80 символов; 
* конструктор, позволяющий создавать строку произвольного размера; 
* конструктор, который создаёт строку и инициализирует её строкой, полученной от пользователя. 
класс должен содержать методы для ввода строк с клавиатуры и вывода строк на экран.*/
 
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
 
HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);
 
class String
{
private:
    char * string;
public:
    String() //По умолчанию.
    {
        string = new char[80];
        Initialization();
    }
    ~String()
    {
        delete [] string;
    }
    void Initialization()
    {
        cout<<"Максимальный размер строки может быть 80 символов!\n\n";
        cout<<"Введите строку: ";
        cin>>string;
        if(strlen(string) > 80)
        {
            system("cls");
            cout<<"Вы ввели сильно много символов!\n\n";
            system("exit");
        }
        else
        {
            system("cls");
            OemToAnsi(string,string);
            ShowString();
        }
    }
    void ShowString()
    {
        cout<<"Строка: "<<string<<endl<<endl;
    }
    void Stand(int x, int y, int key, char*str)
    {
        CONSOLE_CURSOR_INFO ci; ci.bVisible=0; ci.dwSize=100; SetConsoleCursorInfo(H,&ci);
        setlocale(LC_ALL,"RUS");
        COORD c;
        c.X = x; c.Y = y;
        SetConsoleCursorPosition(H,c);
        SetConsoleTextAttribute(H,key);
        cout<<str<<"\n";
    }
};
 
void main()
{
    system("title String");
    setlocale (0, "");
    String s;
    s.Stand(0,2,10,"Параметры по умолчанию");
    s.Stand(0,4,2,"Произвольная строка");
    s.Stand(0,6,2,"Создать строку");
    s.Stand(0,8,2,"Выход");
 
    int key; 
    int punkt = 1;
    while(1)
    {
        key = getch();
        if(key == 80)
        {
            if(punkt < 4)
            {
                punkt++;
                if(punkt == 2)
                {
                    s.Stand(0,2,2,"Параметры по умолчанию");
                    s.Stand(0,4,10,"Произвольная строка");
                }
                else if(punkt = 3)
                {
                    s.Stand(0,4,2,"Произвольная строка");
                    s.Stand(0,6,10,"Создать строку");
                }
                else if(punkt == 4)
                {
                    s.Stand(0,6,2,"Создать строку");
                        s.Stand(0,8,10,"Выход");
                }
            }
        }
        else if(key == 72)
        {
            if(punkt > 1)
            {
                punkt--;
                if(punkt == 3)
                {
                    s.Stand(0,6,10,"Создать строку");
                    s.Stand(0,8,2,"Выход");
                }
                else if(punkt == 2)
                {
                    s.Stand(0,4,10,"Произвольная строка");
                    s.Stand(0,6,2,"Создать строку");
                }
                else if(punkt == 1)
                {
                    s.Stand(0,2,10,"Параметры по умолчанию");
                    s.Stand(0,4,2,"Произвольная строка");
                }
            }
        }
        else if(key == 13)
        {
            system("cls");
            SetConsoleTextAttribute(H,12);
            if(punkt == 1) cout<<"Параметры по умолчанию!\n\n";
            else if(punkt == 2) cout<<"Произвольная строка\n\n";
            else if(punkt == 3) cout<<"Создать строку!\n\n";
            else cout<<"До свидания!\n\n";
            getch();
            exit(0);
        }
    }
 
}
Дело в том, что в меню, которое мне скинули всё в порядке. Смена оттенка пункта работает нормально(со всеми пунктами), а в моём всё печально. - Изначально оттенок первого пункта яркий, потом перехожу на второй с помощью клавиш(стрелочки вверх, вниз), второй пункт тоже нормально, третий также, а на 4 перейти не получается и оттенок не меняется. Help please!

Добавлено через 4 минуты
Вообще я не сильно разобрался в конструкторах... Как их перегружать понятно, но смысл? Как я понял их перегрузка полезна в полиморфизме (в зависимости от ситуации), но как это принимать? Например строки, пользователь вводит строку, но я хочу чтобы это была нормальная строка, например не состояла из цифр и т.п? - Тогда перегрузка конструкторов сработает автоматически? Например я ввёл нормальною строку и выполнилось действие, а если ввёл не кучу символов или много цифр, то напишет : "Строка не может состоять из одних цифр!" - как-то так...

Добавлено через 4 минуты
Ещё, скажите мне пожалуйста, какие у меня есть ошибки в коде? + возник вопрос можно ли как-то контролировать ввод строки? например я не хочу, например оператором cin>> я прошу пользователя ввести символьную строку т.е какое-то слово или предложение, ну не хочу я, чтобы она состояла из цифр... как это проверить?

Добавлено через 1 час 27 минут
Помогите. SOS. А то не у кого спросить кроме вас и работа стоит...

Добавлено через 2 часа 44 минуты
пока от вас чего-то дождёшься... я разочарован... Помогите хоть с синтаксисом и теорией:

Вообще я не сильно разобрался в конструкторах... Как их перегружать понятно, но смысл? Как я понял их перегрузка полезна в зависимости от ситуации, но как этим пользоваться? Например строки, пользователь вводит строку, но я хочу чтобы это была нормальная строка, не состояла только из цифр и т.п? - Тогда перегрузка конструкторов сработает автоматически? Например я ввёл нормальною строку и выполнилось действие, а если ввёл кучу символов или много цифр, то напишет : "Строка не может состоять из одних цифр!" - как-то так...

+ Ещё, скажите мне пожалуйста, какие у меня есть ошибки в коде? + возник вопрос можно ли как-то контролировать ввод строки? например я не хочу, например оператором cin>> я прошу пользователя ввести символьную строку т.е какое-то слово или предложение, ну не хочу я, чтобы она состояла из цифр... как это проверить?

Добавлено через 1 минуту
меню не работало из-за того, что в я одном if'e случайно место оператора сравнивания написал оператор присваивания ахах
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru