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

C++

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

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

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

Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур - C++
Сабж. Нужен способ помещения разного рода типа данных в контейнеры типа массивов или структур или... пободного рода простых для восприятия...

функции с переменным количеством параметров - C++
для некоторого класса необходимо чтобы его конструктор принимал переменное количество параметров. как это делается - понятно. я...

Функция с переменным числом параметров - C++
Вычисление суммы ряда значений оформить в виде функции с переменным числом параметров. прога вот: В ней не хватает как рас...

Рефакторинг: функция с большим количеством параметров - C++
День добрый. Скажите плз, гуру рефакторинга. Вот есть функция и в нее передаётся туча параметров. Как лучше исправить ситуацию? На ум...

Функции с переменным количеством параметров - C++ Builder
Прописываю в заголовке: void __fastcall TestClass::Test(int x, ...); компилятор выдает ошибку: Conflicting type modifiers В C++...

Функции с неизвестным количеством аргументов - C++ Builder
Давно хочу узнать больше о такой интересной, но мало освещённой теме, как функции с неизвестным количеством аргументов. Знаю лишь то, как...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2015, 23:51
Привет! Вот еще темы с ответами:

Функция с переменным числом параметров - C++ Builder
Хочу написать функцию очищающую произвольное число MaskEdit.Выдает ошибку в описании функции. Вот код, как правильно? void...

Функция с переменным количеством аргументов - C#
Не могу понять как это работает. Подскажите пож-ста. Имеется функция, нужно указывая с textbox цифры через запятую или просто в строку,...

Функция с переменным количеством аргументов вызывает out of memory - C++
property(string &amp; name_c, short nesting_c, string &amp; level1, ...) { nesting=nesting_c; name=name_c; va_list p; ...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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