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

Функция с переменным количеством аргументов разного типа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Распознавание текста OpenCV http://www.cyberforum.ru/cpp/thread1566529.html
Доброго времени суток! посмотрел на днях видео https://www.youtube.com/watch?v=pgth0qxTgYY и меня заитересовал этот проект. моя идея такова: получаем картинку с видео, обрабатываем с Canny затем...
C++ Ошибка Access violation при передаче указателя в функцию выделяю память для нужд програмных и соханяю его. char *resadres =(char*) VirtualAlloc (0, 50000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); char *wresadres = resadres; вызываю вот так функцию... http://www.cyberforum.ru/cpp/thread1566254.html
C++ Голосовое управление
Привет всем. Захотелось создать прогу с голосовым управлением. Как?) не знаю как сделать, что бы прога после фразы, поняла, что надо выполнять определённое действие.
Подключение к MySQL C++
Ребят, не могу подключиться к мускулу через с++. Нигде не нашёл нужной мне информации. Надеюсь вы поможете.
C++ Разработка класса, вычитание очереди из очереди http://www.cyberforum.ru/cpp/thread1565955.html
Здравствуйте. При написании класса столкнулся с проблемой. Задача реализовать вычитание очереди из очереди. Я реализовывал эту операцию как разность двух множеств. Но у меня не получилось. Вот код:...
C++ Лямбды и захват переменных Лямбды могут захватывать переменные через {}. Вопрос: а куда, собственно, эти переменные захватываются - в статический буфер общий для всех вызовов лямбды или в локальный буфер формируемый под каждый... подробнее

Показать сообщение отдельно
NikBond
2 / 2 / 2
Регистрация: 21.07.2015
Сообщений: 36

Функция с переменным количеством аргументов разного типа - C++

30.10.2015, 23:51. Просмотров 251. Ответов 0
Метки (Все метки)

Есть функция с переменным количеством аргументов. Эти аргументы имеют разный тип - а точнее, попеременно int и char.

Сама функция - это такой каличный калькулятор с ограниченным множеством операций
т.е., к примеру, такой вызов функции должен вернуть (2+3)*7 = 35 и т.д., на заданом множестве операций
C++
1
solve( 2, '+', 3, '*', 7, ' ' );
На выделенной строчке программа падает с сигналом SIGILL. В чем ошибка? Как исправить?

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
int solve(int a, ...){
    va_list ptr;
    va_start (ptr, a);
    int arg ;
    char op;
    int res = a;
    for(int switcher = 0; ;){
        if (switcher == 0){
            op = va_arg (ptr, char); //здесь
            if (op == ' ') break;
            switcher++;
        }
        else{
            arg = va_arg (ptr, int);
            switcher--;
        }
        res = operation(res, op, arg);
 
    }
    va_end(ptr);
    return res;
}
 
int operation(int arg1, int op, int arg2){
    switch (op){
        case '+': return arg1+arg2;
        case '-': return arg1+arg2;
        case '>': return arg1>>arg2;
        case '<': return arg1<<arg2;
        case '&': return arg1&arg2;
        case '%': return arg1%arg2;
    }
}
Добавлено через 20 минут
C++
1
op = (char) va_arg (ptr, int);
По совету заменил ту строку на вот эту. Уже не падает, но результат выдает не тот.

Добавлено через 5 минут
Прошу прощение за беспокойство, проблема решена, за такие глупости стыдно.
Всего хорошего!
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
int solve(int a, ...){
    va_list ptr;
    va_start (ptr, a);
    int arg ;
    char op;
    int res = a;
    for(;;){
        op = (char) va_arg (ptr, int);
        if (op == ' ') break;
        arg = va_arg (ptr, int);
        res = operation(res, op, arg);
    }
    va_end(ptr);
    return res;
}
 
int operation(int arg1, int op, int arg2){
    switch (op){
        case '+': return arg1+arg2;
        case '-': return arg1-arg2;
        case '>': return arg1>>arg2;
        case '<': return arg1<<arg2;
        case '&': return arg1&arg2;
        case '%': return arg1%arg2;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru