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

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

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

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

03.09.2010, 15:46. Просмотров 757. Ответов 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     Сделать функцию "Команда"
Посмотрите здесь:

C++ Вычищает ли "мусор" команда delete
C++ Как сделать "Старт", "Пауза", Стоп"?
C++ Как заменить функцию printf из "С" в "С++"?
Имеется строка "AAABBCCAA", нужно вывести на экран "3A2B2C2A", и так же сделать обратное действие C++
C++ Написать функцию выбора пунктов меню стрелками "вверх" "вниз"
Массивы структур "Футбольная команда" C++
C++ Тяжело ли написать утилитку, которая работает как DOS-команда "pause"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
03.09.2010, 15:51     Сделать функцию "Команда" #2
bodrich, switch в руки.
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 954
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:10  [ТС]     Сделать функцию "Команда" #3
не удобно со switch
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
03.09.2010, 16:18     Сделать функцию "Команда" #4
Цитата Сообщение от bodrich Посмотреть сообщение
Может кто помочь написать функцию "команда", т.е. например в консольном приложении вводишь команду, например hello, в ответ выводится hello world и тому подобное, задавать команду примерно так:
Не очень понятно, что Вы хотите сделать. Вернее совсем непонятно.
Crudelis
Шаровик затейник
669 / 411 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
03.09.2010, 16:23     Сделать функцию "Команда" #5
Цитата Сообщение от bodrich Посмотреть сообщение
не удобно со switch
я бы сказал очень даже удобно со свитчем, либо пишите ифы
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 954
Записей в блоге: 16
Завершенные тесты: 1
03.09.2010, 16:40  [ТС]     Сделать функцию "Команда" #6
когда используешь ифы, и много таких "команд" получается довольно запутанный код, насчет switch, там вроде слова нельзя использывать, только отдельные символы...
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
03.09.2010, 16:44     Сделать функцию "Команда" #7
bodrich, Да. Ну тогда if-ы. А зачем это вообще? Или назначить какая цифра отвечает за какую команду и собственно идти через switch
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 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     Сделать функцию "Команда"
Еще ссылки по теме:

C++ Консольная команда "make" компилирует не в ту папку
C++ Как сделать execl("my", "arg", argv)?
C++ Шифрование ГОСТ, error C1021: "Недопустимая команда препроцессора"
C++ Как сделать так, чтобы scanf в переменную double мог считывать с клавиатуры не только "0,01", но и "0.01"
Как сделать так, чтобы введенное с клавиатуры слово "helllo" в памяти сохранялось в виде "Hello". C++

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

Или воспользуйтесь поиском по форуму:
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     Сделать функцию "Команда"
Ответ Создать тему
Опции темы

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