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

C++

Войти
Регистрация
Восстановить пароль
 
NikBond
2 / 2 / 2
Регистрация: 21.07.2015
Сообщений: 36
#1

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

30.10.2015, 23:51. Просмотров 232. Ответов 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;
    }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2015, 23:51     Функция с переменным количеством аргументов разного типа
Посмотрите здесь:

Функция с переменным количеством аргументов вызывает out of memory C++
C++ Функция с переменным количеством параметров-оъектов
Странное поведение функции с переменным количеством аргументов C++ WinAPI
C++ Функция с переменным кол-вом аргументов char vs int
C++ Функция с неограниченным количеством аргументов
Функция с переменным количеством параметров C++
Функция с переменным числом параметров заранее неизвестного типа C++
Функция с переменным количеством параметров C++
C++ Функция с переменным числом аргументов (через шаблоны)
C++ шаблон функции с переменным количеством аргументов
Шаблонная функция с переменным числом аргументов C++
C++ Функция суммы с переменным количеством параметров

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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