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

Как упростить меню? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вопросы по C++ http://www.cyberforum.ru/cpp-beginners/thread364252.html
Всем привет! У меня появилось несколько вопросов по C++, был бы рад, если бы Вы помогли бы мне хотя бы из одним из них. 1) Как узнать количество строк в файле; 2) Как узнать количество символов в файле; 3) Как узнать количество символов в отдельной строке файла; 4) Как считать каждую строку в отдельный массив символов (char); 5) Есть строка с N-ым количемством чисел, записаных через...
C++ Вычислить значение выражения ребят,помогите решить эти задачи в "С". http://www.cyberforum.ru/cpp-beginners/thread364241.html
C++ C++ и MPI
Подскажите пожалуйста, бесплатный компилятор, который работает хотя бы со второй версией библиотеки MPI, хотя уже есть третья версия. Платформа на компе: Windows, конфиг - AMD.
C++ классы
что значит : и :: A-основной класс B-производный класс B::B(int ch,char *str):A(ch) {} непонимаю зачем тут A(ch) без этого не компилируется Добавлено через 17 минут
C++ Сохранить переменный член в области динамической памяти ???? http://www.cyberforum.ru/cpp-beginners/thread364212.html
Есть класс class Analiz { public: Analiz(); ~Analiz(); int A(){return itsA;} void B(int I){itsA=I;} private:
C++ Передача вектора по ссылке Делаю задание Страуструпа на шаблоны, но столкнулся с тем что передавая вектор по ссылке он передаётся не по ссылке (такая вот тавтология). #include <iostream> #include <vector> #include <algorithm> using namespace std; template<typename T> class Sort { подробнее

Показать сообщение отдельно
Ztrel
 Аватар для Ztrel
441 / 215 / 14
Регистрация: 14.11.2009
Сообщений: 371
10.10.2011, 20:55     Как упростить меню?
Посмотри, может понравится =)

Набор констант для менюшки.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Массив для вывода менюшки.
const char* menu[] = 
{" ---------------------------------------- \n",
"\n",
"0. Quit.\n"
"1. Create Test List of strings. \n",
"2. Input strings from CLI. \n"
"3. Print Arrays. '\n",
"4. Form new Array. \n",
"\n",
" ---------------------------------------- \n"};
 
// Количество пунктов в меню = размер типа menu, деленный на размер указателя на тип char.
const size_t menulen = sizeof(menu) / sizeof(char*);

Метод Menu()

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
/* -- Вывод менюшки на экран -- */
size_t Menu()
{
    size_t choice = 0; // Объявляем целую беззнаковую переменную для будущего выбора пользователя.
    const char *error = ""; // А так же объявляем указатель на символьную константу - для текста ошибки, если таковая возникнет.
 
    do // Организуем цикл с постусловием.
    {
        cout << error << endl; // Выводим на экран текст ошибки; если ее нет - на экране ничего не изменится.
        error = "Error choice, repeat your choice!\n"; // но если мы попадем в цикл во второй раз - значит ошибка была ==> пишем ее текст.      
        cout << "Please, enter value from 0 to " << menulen - 3 << " " << endl; // Выведем просьбу о вводе числа от 0 до количества строчек в меню.
        cout << endl; // пропускаем строчку для красивости.
        // Цикл вывода на экран массива менюшки.
        for ( size_t tmpcnt = 0; tmpcnt < menulen; ++tmpcnt )
            cout << menu[tmpcnt];
        cout << "Your choice:  "; // вся для красивости =)
        cout << endl; // пропуск строчки.
    }
    /* И этот цикл с постусловием будет выполняться до тех пор, пока:
       введенное пользователем число будет больше, чем количество строчек в меню или меньше нуля. */
    while ( ( !InputCLI(choice) ) && ( choice > menulen - 3 ) ); 
    cout << endl; // пропуск строчки.
 
    return choice; // На выход функции подается выбор пользователя.
}
Метод InputCLI

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* -- Обработка ошибок ввода с консоли целого беззнакового числа -- */
int InputCLI ( size_t &x )
{
    while ( cin >> x, cin.fail() ) // Пока при вводе числа X мы получаем какую-нибудь ошибку ( это и есть cin.fail() ), делаем...
    {
        if ( cin.bad() || cin.eof() ) // Если ошибка связана с системой, или же пользователь предпочел прервать ввод (символ конца ввода)
            return -1; // Выходим из функции, с кодом ошибки = -1.
 
        cin.clear(); // после этого сбрасываем в ноль все флаги объекта cin.
        cin.ignore(); // и игнорируем один введенный символ (на случай, если ввели " а6 ", к примеру).
    }
 
    return 0; // Если же ввод прошел успешно, возвращаем введенную переменную и код успешного завершения = 0.
}

И наконец, главный метод - main()

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
int main()
{
    // Объявляем переменные.
 
    Stroka* HeadList = 0; // ссылка на первый элемент изначального списка - сразу обнуляем.
    Stroka* EndList = 0; // ссылка на последний элемент изначального списка - сразу обнуляем.
 
    int choice = 0; // переменная выбора пользователя.
 
    Stroka* HeadIzmList = 0; // ссылка на первый элемент сформированного списка.
    Stroka* EndIzmList = 0; // ссылка на последний элемент сформированного списка.
 
    while ( choice = Menu() ) // До тех пор, пока пользователь не введет нолик (чтобы выйти), делаем..
    {
        switch (choice) // идет анализ выбора пользователя.
        {
                case 1: // Если выбрал пункт № 1.
            {
                cout << "----------------------------------------------------" << endl;
                DestroyList(HeadList); // на всякий случай очищаем список.
                cout << "\tCreating test List in process..." << endl;
                HeadList = CreateTest(EndList); // создаем тестовый массив.
                cout << "\tCreating test List complete!" << endl;
                cout << "----------------------------------------------------" << endl;
                break; // выходим.
            }
 
                case 2:  // если выбрал пункт № 2.
            {
                cout << "----------------------------------------------------" << endl;
                DestroyList(HeadList); // уничтожаем список.
                InputStrCLI (&HeadList, &EndList); // запускаем процедуру ввода строчек.
                cout << "----------------------------------------------------" << endl;
                // Ввели строчки и радуемся =)).
                break; // выходим.
            }
 
                case 3: // если выбрал пункт № 3.
            {
                cout << "----------------------------------------------------" << endl;
                cout << "\tPrinting arrays to CLI in process..." << endl;
                cout << "\tOld array:  " << endl << endl;
 
                PrintList(HeadList); // вывели старый список.
 
                cout << endl << "\tFormed array:   " << endl << endl;
 
                PrintList(HeadIzmList); // вывели новый список.
 
                cout << endl << "\tPrinting arrays to CLI complete!" << endl;
                cout << endl << "----------------------------------------------------" << endl;
                break; // выходим.
            }
 
                case 4:
            {
                cout << "----------------------------------------------------" << endl;
                cout << "\tForming new array in process..." << endl;
                // FormingArray (Head.next, Formed.next); // формируем новый массив.
 
                // Уничтожаем мусор.
                DestroyList(HeadIzmList); // уничтожаем сформированный список.
                // И формируем новый список.
                HeadIzmList = FormingList ( HeadList );
 
                cout << "\tForming new array complete!" << endl;
                cout << "----------------------------------------------------" << endl;
            }
        }
    }
 
    DestroyList(HeadList); // уничтожаем изначальный список.
    DestroyList(HeadIzmList); // уничтожаем сформированный список.
    
    return 0;
 
}

P.S. - Кидал тебе кусочки своей программы - поэтому надо смотреть просто на оформление, а не на названия функций =)
 
Текущее время: 15:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru