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

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

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

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

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

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

Шифрование ГОСТ, error C1021: "Недопустимая команда препроцессора" - C++
Здравствуйте,пишу метод шифрования ГОСТ и возникли вот такие ошибки: error C1021:недопустимая команда препроцессора"ifdef_alpha"(15...

Тяжело ли написать утилитку, которая работает как DOS-команда "pause" - C++
Тяжело ли написать утилитку, которая работает как DOS-команда "pause", но с автопродолжением через (например) 10 секунд? Научился...

Консольная команда "make" компилирует не в ту папку - C++
Я компилирую библиотеку через MSYS и, по идеи, скомпилированные файлы должны быть в папке C:\MinGW, но они появляются в папке...

Массивы структур "Футбольная команда" - C++
На основе таблицы чемпионата по футболу, содержащей данные о команде (название команды, число выигрышей, поражений, ничьих, количество...

Вычищает ли "мусор" команда delete - C++
Все-таки добил свою учебную программку.) И созрело пару вопросов. Первый, самый важный : команда delete objPat в моем коде вычищает уже не...

Как заменить функцию printf из "С" в "С++"? - C++
Я знаю, что саму функцию printf можно заменить функцией cout, но меня интересует как заменить то, что в скобках? printf("%4d",a); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
03.09.2010, 15:51     Сделать функцию "Команда" #2
bodrich, switch в руки.
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 958
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:10  [ТС]     Сделать функцию "Команда" #3
не удобно со switch
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.09.2010, 16:18     Сделать функцию "Команда" #4
Цитата Сообщение от bodrich Посмотреть сообщение
Может кто помочь написать функцию "команда", т.е. например в консольном приложении вводишь команду, например hello, в ответ выводится hello world и тому подобное, задавать команду примерно так:
Не очень понятно, что Вы хотите сделать. Вернее совсем непонятно.
Crudelis
Шаровик затейник
672 / 414 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
03.09.2010, 16:23     Сделать функцию "Команда" #5
Цитата Сообщение от bodrich Посмотреть сообщение
не удобно со switch
я бы сказал очень даже удобно со свитчем, либо пишите ифы
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 958
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:40  [ТС]     Сделать функцию "Команда" #6
когда используешь ифы, и много таких "команд" получается довольно запутанный код, насчет switch, там вроде слова нельзя использывать, только отдельные символы...
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
03.09.2010, 16:44     Сделать функцию "Команда" #7
bodrich, Да. Ну тогда if-ы. А зачем это вообще? Или назначить какая цифра отвечает за какую команду и собственно идти через switch
fasked
Эксперт С++
4933 / 2513 / 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 и не принимать значений. На Си++ эту проблему в принципе можно решить с помощью шаблонов (учитывая что в грядущем стандарте должна появится поддержка шаблонов с переменным количеством аргументов).
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.09.2010, 18:27     Сделать функцию "Команда" #9
fasked,
Ну почему быдлокод? За что же вы так си не любите, не уж то только за изобретения велосипеда?
fasked
03.09.2010, 18:32
  #10

Не по теме:

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

silent_1991
03.09.2010, 18:35
  #11

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2010, 19:37     Сделать функцию "Команда"
Еще ссылки по теме:

Как сделать константными значения "m" и "n" - C++
не знаю как сделать константными значения &quot;m&quot; и &quot;n&quot; так как я создал динамический массив и ввожу эти значения с клавиатуры. подскажите как...

Написать функцию, реализующую логическую операцию "Исключающее ИЛИ" - C++
Напишите функцию bool Xor (bool x, bool y), реализующую функцию &quot;Исключающее ИЛИ&quot; двух логических переменных x и y. Функция Xor должна...

Чем можно заменить функцию setlocale(LC_ALL, "RUSSIAN")? - C++
напишите пожалуйста пример!!

Определить функцию для вычисления количества букв "е" в слове - C++
определить функцию для вычисления количества букв &quot;е&quot; в слове. Подсчитать количество букв Е в 4 словах введенных с клавиатуры. вывести...


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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
03.09.2010, 19:37     Сделать функцию "Команда"
Ответ Создать тему
Опции темы

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