Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 29

Меню через switch и case

24.05.2018, 10:59. Показов 9810. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна помощь довести программу до ума, в конце программы в main сделать меню меню через switch и case:
1. Ввод строки
2. Ввод искомой строки
3. Ввод заменяющей строки
4. Вывод на экран // тут должна выводится строка до замены и после замены

Так же еще нужно сделать так, чтобы можно было перемещаться по пунктам меню стрелочками вверх и вних, PgUp и PgDn, номера этих кнопок уже есть тут ( enum Keys{ enter=13, page_up=33, page_down=34}; )

Реализовать в этой программе:

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
#include "stdafx.h"
#include <iostream>
#include "conio.h"
#include <fstream>
 
using namespace std;
void search_and_destroy(char *&string)
{
    char* buff1 = new char[1024];
    char* buff2 = new char[1024];
    int n = strlen(string);
    cout << "Введите искомую строку:" << endl;
    cin.getline(buff1, 1024, '\n');
    cout << "Введите строку которой хотите заменить:" << endl;
    cin.getline(buff2, 1024, '\n');
    int n2, start; 
    for (int i = 0;i<n; i++)
    {
        if (string[i] == buff1[0])
        {
            start = i;
            for (int j = 0; j < strlen(buff1); )
            {
                if (string[i] != buff1[j])break;
                n2 = j;
                j++; i++;
                
            }
            if (n2+1 == strlen(buff1))
            {
                for (int l = 0; l < strlen(buff2); l++)
                {
                    string[start] = buff2[l];
                    start++;
                }
 
            }
        }
 
 
    }
    cout << "Ваша строка:" << endl;
    for (int i=0;i<n;i++)   cout << string[i];
    cout << endl;
    getchar(); getchar();
 
}
 
void getstring(char*&string)
{
    cout << "Введите строку" << endl;
    cin.getline(string, 1024, '\n');
    cout << "Ваша строка:" << endl;
    for (int i = 0; i<strlen(string); i++)  cout << string[i];
    cout << endl;
}
 
void main()
{
    setlocale(LC_ALL, "rus");
        char * main_string =  new char[1024];
        getstring(main_string);
    search_and_destroy(main_string);
    enum Keys{ enter=13, page_up=33, page_down=34};
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2018, 10:59
Ответы с готовыми решениями:

Меню в консоли (через switch-case)
программа меню ресторана, работать должна так: открывается все меню а официант выбирает блюда из заказа, а в конце вывести весь заказ. ...

Переделать меню через switch / case
Написал такой код. Условие для задачи такое: Необходимо написать программу со следующей функциональностью: 1. Функция...

Составление меню Switch Case
Саму оболочку сделал, а вот как сделать, чтобы после ввода 1 значения, можно было продолжить работу в программе (выбор 2 значения) - не...

6
 Аватар для Cortas
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
24.05.2018, 12:51
Например, вот так:
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
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
#include <Windows.h>
 
using namespace std;
 
enum ConsoleColor//все доступные цвета
{ Black, Blue, Green, Cyan, Red, Magenta, Brown, Gray, DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White };
 
enum Keys//ключи клавишь 
{ down = 80, up = 72, left = 75, right = 77, pg_up = 73, pg_down = 81, enter = 13, err = -32 };
 
void set_color(int text = ConsoleColor::Gray, int background = ConsoleColor::Black)//меняем цвета
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, (WORD)((background << 4) | text));
}
 
void set_cursor(int x, int y)//устанавливаем курсор в точку (x; y)
{
    COORD scrn;
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
    scrn.X = x; scrn.Y = y;
    SetConsoleCursorPosition(hOuput, scrn);
}
 
unsigned short int menu_f(vector<string>& menu, unsigned short int* menu_colors)
{//первый аргумент - вектор со строками для пользовательского выбора
 //второй аргумент - массив на 4 эл. для цветов (не акт. текст, не акт. задник, акт. текст, акт. задник)
    char buf = down; //переменая для клавиш
    unsigned short int choose = 0; //будем возвращать номер строки, которую выбрал пользователь
 
    for(int i = 1; i < menu.size(); i++)//выводим все доступные варианты, начиная со второго
        cout << endl << i + 1 << ". " << menu[i];
    do
    {
        if((buf == up && choose != 0) || //проверяем на та ли клавиша и не вылетим ли мы за пределы
           (buf == down && choose != menu.size() - 1))
        {
            for(int i = 0; i < 3; i += 2)//повторяем цикл дважды, первый раз "обесцвечиваем текущую", переходим на след. и красим её
            {
                set_cursor(0, choose);//курсор на нужную строчку.
                set_color(menu_colors[i], menu_colors[i + 1]);//выбираем цвет
                cout << choose + 1 << ". " << menu[choose];//выводим строчку и номер
                choose += (buf == up) ? -1 : (buf == down) ? 1 : 0;//увеличиваем или уменьшаем choose (зависит от buf)
            }
            choose += (buf == up) ? 1 : (buf == down) ? -1 : 0;//т.к. цикл прошел дважды, то choose тоже изменился дважы, а нам нужно лишь один раз
        }
        buf = _getch();//считываем что нажал пользователь
        if(buf == err) buf = _getch();//если он нажал стрелочку, то там происходит двойное нажатие, где первый символ -32, а второй, что нам нужен
    } while(buf != enter);//условие выхода
    set_color();//возвращаем цвет на свои места
    return choose;//вовзращаем номер строчку, которую выбрал пользователь
}
 
int main()
{
    vector<string> menu = //вот список команд, которые вам были нужны
    {"Enter a string", 
     "Enter the desired string", 
     "Enter the replasing string", 
     "Print to screen"};
    unsigned short int menu_colors[4] = { Gray, Black, Green, Black };//вот основные цвета первые два - неактивный цвет (текст, задник); втрое два - активный цвет (текст, задник)
    
    switch(menu_f(menu, menu_colors))//в switch'е смотрим, что нам вернула функция menu_f и делаем то, что нам нужно
    {
        case 0:
            break;
        case 1:
            break;
        case 2:
            break;
            //...
    }
    _getch();
    return 0;
}
1
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 29
24.05.2018, 13:25  [ТС]
Меню работает, спасибо большое, только осталось понять как вызвать через кейсы мои функции void search_and_destroy(char *&string) и void getstring(char*&string), так чтобы корректно все работало)
0
 Аватар для Cortas
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
24.05.2018, 13:33
Yehot, в switch'e.

Добавлено через 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
int main()
    {
        vector<string> menu = //вот список команд, которые вам были нужны
        { "Enter a string",
        "Enter the desired string",
        "Enter the replasing string",
        "Print to screen" };
        unsigned short int menu_colors[4] = { Gray, Black, Green, Black };//вот основные цвета первые два - неактивный цвет (текст, задник); втрое два - активный цвет (текст, задник)
        char* str;
 
        switch(menu_f(menu, menu_colors))//в switch'е смотрим, что нам вернула функция menu_f и делаем то, что нам нужно
        {
            case 0:
                getstring(str);
                break;
            case 1:
                search_and_destroy(str);
                break;
            case 2:
                //это у вас ещё не реализовано
                break;
            case 3:
                set_cursor(0, menu.size() + 1);
                cout << "your string: " << str;
                break;
        }
        _getch();
        return 0;
    }
0
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 29
24.05.2018, 13:46  [ТС]
Ругается на эту строчку int n = strlen(string); 11 строчка в коде который самый первый в это теме, пишет :
Вызвано исключение по адресу 0x5338FBA0 (ucrtbased.dll) в rgr_ta.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC.
0
 Аватар для Cortas
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
24.05.2018, 13:59
Yehot, потому что память под str не выделена
C++
1
2
3
4
char* str = new char[1024];
...
//конец кода:
delete[] str;
Если вы не учитесь работать с char* строками, то я бы посоветовал пользоваться классом string
1
0 / 0 / 0
Регистрация: 23.05.2018
Сообщений: 29
24.05.2018, 14:07  [ТС]
Спасибо за ответы и за совет, помогло!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2018, 14:07
Помогаю со студенческими работами здесь

switch, case, создание многоуровнего меню
Добрый день. Хотел спросить у вас совет по реализации. Пишу многоуровневое меню в консоли. Вот часть кода ... switch(input_main) ...

Стек через case в switch
Здравствуйте. Я хочу чтобы при нажатии на &quot;2&quot; у меня выводился на экран мой стек. Но, как обычно, ошибка, я не знаю в чем проблема,...

косяк вызова функции через switch case
! кода по моим меркам много, если решитесь помочь, запаситесь терпением))) Итак. Имеется зародыш курсовой - игры пятнашки. делал в...

Оптимальная конструкция switch-case-while / while-switch-case
Имеется конструкция типа: switch() { case 1: while() { ... }

Вывести в одну строку два слова через оператор выбора switch-case
Помогите исправить программу, чтобы выводилось в одну строку сразу 2 выбранных слова,например &quot;Король червы&quot; #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru