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

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

Войти
Регистрация
Восстановить пароль
 
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 961
Записей в блоге: 16
Завершенные тесты: 1
#1

Сделать функцию "Команда" - C++

03.09.2010, 15:46. Просмотров 786. Ответов 11
Метки нет (Все метки)

Может кто помочь написать функцию "команда", т.е. например в консольном приложении вводишь команду, например hello, в ответ выводится hello world и тому подобное, задавать команду примерно так:
C++
1
2
3
4
command("hello")
{
printf ("Hello World\n");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2010, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сделать функцию "Команда" (C++):

Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация") - C++
Вывести из структуры информацию о человеке, чья фамилия введена с клавиатуры #include <iostream> #include <locale> #include...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Написать функцию выбора пунктов меню стрелками "вверх" "вниз" - C++
Доброго всем времени суток.Пожалуйста подскажите как мне справиться с моей проблемой.Нужно написать функцию выбора пунктов меню стрелками...

Как сделать "Старт", "Пауза", Стоп"? - C++
Доброго времени суток, как сделать так, чтобы при нажатии на кнопку начиналось цикличное действие (рисование например) и продолжалось бы...

Нужно сделать так, чтобы при вводе числа, выводило "рублей" или "рубль" - C++
Начал решать задачу и засох на средине, не выходить формулу написать,если не сложно,подскажите) с с++ знаю пока что if,else и swith) //...

11
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 15:51 #2
bodrich, switch в руки.
0
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 961
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:10  [ТС] #3
не удобно со switch
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.09.2010, 16:18 #4
Цитата Сообщение от bodrich Посмотреть сообщение
Может кто помочь написать функцию "команда", т.е. например в консольном приложении вводишь команду, например hello, в ответ выводится hello world и тому подобное, задавать команду примерно так:
Не очень понятно, что Вы хотите сделать. Вернее совсем непонятно.
0
Crudelis
Шаровик затейник
674 / 416 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
03.09.2010, 16:23 #5
Цитата Сообщение от bodrich Посмотреть сообщение
не удобно со switch
я бы сказал очень даже удобно со свитчем, либо пишите ифы
0
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 961
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:40  [ТС] #6
когда используешь ифы, и много таких "команд" получается довольно запутанный код, насчет switch, там вроде слова нельзя использывать, только отдельные символы...
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 16:44 #7
bodrich, Да. Ну тогда if-ы. А зачем это вообще? Или назначить какая цифра отвечает за какую команду и собственно идти через switch
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.09.2010, 18:18 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <map>
#include <string>
#include <iostream>
 
void f_begin() {
    std::cout << "call f_begin" << std::endl;
}
 
std::map <std::string, void (*)()> functions;
 
void init() {
    functions["BEGIN"] = f_begin;
}
 
void command(const char *cname) {
    functions[cname]();
}
 
int main()
{
    init();
    command("BEGIN");
}
Добавлено через 54 минуты
Вот быдолкод на Си
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
#include <stdio.h>
 
// Обработчик команды BEGIN
void f_begin() 
{
    printf("call f_begin\n");
}
 
// Максимальная длина имени команды
#define MAX_FNAME 32
 
// Максимальное количество обработчиков команды
#define MAX_NFUNC 32
 
// Тип указатель на функцию
typedef void (*fptr_t)(void);
 
// Структура КОМАНДА
typedef struct COMMAND 
{
    char name[MAX_FNAME];
    fptr_t ptr;
} command_t;
 
// Список команд
command_t functions[MAX_NFUNC] = 
{
    { "BEGIN", f_begin }
};
 
// Поиск обработчика по имени
int find_func(char *fname) 
{
    int i;
    
    for(i = 0; i < MAX_NFUNC; ++i)
        if(strcmp(functions[i].name, fname) == 0)
            return i;
            
    return -1;
}    
 
// Вызов обработчика по имени команды
void command(char *fname) 
{
    int i;
    
    if((i = find_func(fname)) == -1) {
        fprintf(stderr, "function not found\n");
        return;
    }
    
    functions[i].ptr();
}
 
int main()
{
    // YEAH!
    command("BEGIN");
}
Можно еще добавить управление списком команд: добавить команду, удалить команду и т.д. Список можно сделать динамическим.
Глубокий минус конечно в том, что все функции обработчики должны быть типа void и не принимать значений. На Си++ эту проблему в принципе можно решить с помощью шаблонов (учитывая что в грядущем стандарте должна появится поддержка шаблонов с переменным количеством аргументов).
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.09.2010, 18:27 #9
fasked,
Ну почему быдлокод? За что же вы так си не любите, не уж то только за изобретения велосипеда?
0
fasked
03.09.2010, 18:32
  #10

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Ну почему быдлокод? За что же вы так си не любите, не уж то только за изобретения велосипеда?
Я люблю Си, даже очень. Я не люблю свой код на Си, собственно как и на Си++.

0
silent_1991
03.09.2010, 18:35
  #11

Не по теме:

Я не люблю свой код на Си, собственно как и на Си++
Зря...

0
Mencey
147 / 94 / 7
Регистрация: 22.07.2010
Сообщений: 424
03.09.2010, 19:37 #12
Как я понял вам надо что-то типа этого:

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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
void command(char *cmd)
{
  // обработка комманды hello
  if( !strcmp( cmd, "hello" ) )
  {
    printf("Hello, World!!!\n");
  }
  // обработка комманды sum
  // команды sum ействует так
  // Например ввод: "sum12" результат: "summa = 3"
  else if( strstr( cmd, "sum" ) == cmd )
  {
    int s = 0;
    if( cmd[3] >= '0' && cmd[3] <= '9' &&
        cmd[4] >= '0' && cmd[4] <= '9' )
    {
      s = (cmd[3] - '0') + (cmd[4] - '0');
      printf("summa = %i\n", s);
    }
  }
  // обработка комманды exit
  else if( !strcmp( cmd, "exit" ) )
  {
    exit(0);
  }
}
 
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
  char cmd[256];
  while(1)
  {
    scanf("%s", cmd);
    command( cmd );
  }
  return 0;
}
0
03.09.2010, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2010, 19:37
Привет! Вот еще темы с ответами:

Имеется строка "AAABBCCAA", нужно вывести на экран "3A2B2C2A", и так же сделать обратное действие - C++
Доброго времени суток. Помогите организовать, желательно с примером, такую программу: имеется строка &quot;AAABBCCAA&quot;(так же можно абсолютно...

Как сделать так, чтобы scanf в переменную double мог считывать с клавиатуры не только "0,01", но и "0.01" - C++
Помогите!) Не знаю, искал, не нашел, возможно ли вообще. Чтобы и так и так понимал.

Как сделать, так чтобы i и j можно было вводить самому "i" И "j" в цикле, есть программа - C++
#include &lt;iostream&gt; using namespace std; int main() {int a=0,b=0; int i=0; cout&lt;&lt;&quot;Vvedite i=&quot;&lt;&lt;endl; cin&gt;&gt;i; ...

Как сделать так, чтобы введенное с клавиатуры слово "helllo" в памяти сохранялось в виде "Hello". - C++
Здравствуйте. Подскажите пожалауйста как сделать чтоб согда я вводу с клавиатуры helllo, в памяти оставалось &quot;Hello&quot;. Данные типа...


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

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

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