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

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

Войти
Регистрация
Восстановить пароль
 
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
#1

Передача ключей и значений - C++

04.12.2010, 17:27. Просмотров 409. Ответов 3
Метки нет (Все метки)

Как корректно (в хорошем стиле) обрабатывать ключи и параметры передаваемые программе? Потому что ключей будет много (и хотелось бы что бы читающий код не сломал глаза.)

Если не затруднит на примере:
Bash
1
my_time -h Page
должно вывести справку, а
Bash
1
my_time -l
сответсвенно локальное время.
пример для редактирования
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<time.h>
 
void show_help();
void show_time();
 
int main()
{
    show_help();
    show_time();
 
return 0;
}
 
void show_help(){
    std::cout<<"This is help about Page"<<std::endl;
}
 
void show_time(){
  time_t t = time(NULL);
  std::cout<<asctime(localtime(&t))<<std::endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2010, 17:27     Передача ключей и значений
Посмотрите здесь:

C++ Передача значений переменных функциями
Отсортировать введение записи по возрастанию значений ключей C++
C++ Передача значений функций
C++ Изменение ключей реестра Windows
C++ Передача значений в функцию C++
C++ Сколько можно получить регистрационных ключей
C++ Простые программы (генератор ключей)
найти среднее значение всех ключей дерева c++ C++
C++ Передача значений из двумерного массива в функцию
Передача значений из txt C++
Найти пересечение множеств ключей двух map C++
Передача значений матрицы из Mathcad в dev c++ и обратно C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.12.2010, 22:57     Передача ключей и значений #2
boost :: program_options
man 3 getopt

самодельные
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
struct addrforms {
    char domain[MAXDOMAIN];
    char ip[MAXIP];
};
 
struct bitflags {
    unsigned int timeout : 1;
    unsigned int quiet : 1;
};
 
struct options {
    char *prog;
    
    struct addrforms address;
    long port;
    
    char ifname[MAXFILEPATH];
    char ofname[MAXFILEPATH];
    
    struct bitflags flags;
    int timeout;
};
 
int SetOptions(struct options *p, int argc, char *argv[]);
C
1
2
3
4
5
6
7
8
9
10
11
12
13
/* SearchForArg:  search arg in argv */
int SearchForArg(const char ***p, const char *arg,
                 const char **argv)
{
    while (*argv) {
        if (strcmp(arg, *argv) == 0) {
            *p = argv;
            return 0;
        }    
        argv++;
    }
    return -1;
}
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.12.2010, 23:55  [ТС]     Передача ключей и значений #3
Как раз то, что нужно. Общий принцип ясен, спасибо.

Не совсем очевиден порядок извлечения значений, вложите пожалуйста участок кода из SetOptions() в котором происходит получение, например ifname

то есть не понятно зачем используеться ***p, а не **p.

Добавлено через 15 минут
Всё - разобрался, ещё раз большое спасибо.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.12.2010, 02:58     Передача ключей и значений #4
поиск типа ./prog abc -t 10 def
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
    char **argptr;
 
...
 
    /* search for -t nsec */
    
    retval = SearchForArg(
        (const char ***) &argptr,
        "-t",
        (const char **) argv
    );
    
    if (retval == 0) {
    
        tmp.flags.timeout = 1;
        
        tmp.timeout = atoi(argptr[1]);
        
        assert(tmp.timeout >= 0 && "timeout 0, 1, 2 ... ");
    
    }
    
    
    /* search for -i file */
    
    retval = SearchForArg(
        (const char ***) &argptr,
        "-i",
        (const char **) argv
    );
    
    if (retval == 0)
        strcpy(tmp.ifname, argptr[1]);
Yandex
Объявления
05.12.2010, 02:58     Передача ключей и значений
Ответ Создать тему
Опции темы

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