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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.83
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
#1

Как перенести параметры из ф-ции printf() в самодельную - C++

04.06.2011, 09:22. Просмотров 10883. Ответов 103
Метки нет (Все метки)

Ребят, подскажите как решить задачу.
Нужно перенести параметры функции printf() в самодельную ф-цию myfunk(). При условии если булева переменная Х==1. Если не равна 1, то не переносить.
Задача осложняется тем, что число параметров ф-ции может быть переменным.
Подскажите пожалуйста, буду очень признателен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как перенести параметры из ф-ции printf() в самодельную (C++):

Передача ф-ции как параметра другой ф-ции - C++
struct pupil{ char surname; int school; int answer; int num; } tmp, a; int usl(int i, pupil a) { }

Параметры printf - C++
Здравствуйте дорогие форумчане ;) У меня есть вопрос по следующему куску кода. Решив по практиковаться с консольным приложением у меня...

Динамические параметры printf() - C++
Есть код printf("%5s <-- %14s\n", buffer0.c_str(), "n/a"); Что делать если я не знаю на этапе компиляции числа 5 и 14? Для...

Чем ::printf предпочтительнее printf? - C++
Смотрю на код одного толкового программиста и, как новичек в С++, удивляюсь: какой смысл писать в таком стиле? Это же вроде одно и то же....

Калькулятор на Си. Как реализовать триногометрические ф-ции и функцию логарифм? - C++
Написал код в котором надо вводить каждый елемент(первое число, знак операции, второе число, знак операции, 3... знак "=") по отдельности....

Как перенести параметры с XP на 7 - Windows
Не знаю в какой ветке разместить тему, то ли в XP, то ли в 7... Всё началось с того, что установив win7, я не смог установить драйвер на...

103
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:08  [ТС] #31
Я вставлял этот код в исходник в посте 21, компилятор ругался
Может что ни так вставил?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:11 #32
Uklunok, ну приведи что ли сообщения компилятора.
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:20  [ТС] #33
Вот сделал без макросов:
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
#include <stdio.h>
#include <stdarg.h>
 
void my_printf(const char *format, ...) 
{
        va_list args;
 
        printf ("MYPRINTF: ");
 
        va_start(args, format);
        /* обработка формата:
         * if (*format == '%') {
         *      switch(*format) {
         *     case 'd': число
         *      case 's': строка
         *      и так далее
         * }
         */
    vprintf(format, args);
        va_end(args);
}
int main() 
{
my_printf("%d.%d %s", 10, 15, "TEST");
}
Хочу спросить: Вот заголовочный файл stdarg.h от компилятора, в нём такие строки:
C
1
2
3
4
5
6
7
8
9
10
#ifndef STDARG_H
#define STDARG_H
 
typedef short va_list;
 
#define va_start(ap, v) (ap = (va_list) & v + sizeof(v))
#define va_arg(ap, t)   (*(t *) ((ap += sizeof(int)) - sizeof(int)))
#define va_end(ap)      (ap = (va_list) 0)
 
#endif                                 /* STDARG_H */
Т.е. код господина fasked будет работать стабильно?
Сейчас попробую вставить в исходник и откомпилировать.
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:24 #34
Цитата Сообщение от Uklunok Посмотреть сообщение
Т.е. код господина fasked будет работать стабильно?
Сейчас попробую вставить в исходник и откомпилировать.
а почему бы и нет? Код стандартной библиотеки компилятора под определенную платформу в 99% случаев должен работать правильно.
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:36  [ТС] #35
Одна ошибка.
C
1
[VinC.exe] : src\Runtime.c line 87: (error) C1100 undeclared identifier 'vprintf'
Залез в <stdio.h> и прототипа ф-ции vprintf() не нашёл.
Можно поменять на другую? к примеру fprintf() ???

Добавлено через 53 секунды
int fprintf(FILE *, const char *fmt, ...);
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
05.06.2011, 12:39 #36
Uklunok, Без vprintf придется разбивать формат строку на токены и значения соответственно тоже (ну например массив указателей на void*) и вызывать printf с нужными параметрами
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:39 #37
Цитата Сообщение от Uklunok Посмотреть сообщение
Одна ошибка.
C
1
[VinC.exe] : src\Runtime.c line 87: (error) C1100 undeclared identifier 'vprintf'
Залез в <stdio.h> и прототипа ф-ции vprintf() не нашёл.
Можно поменять на другую? к примеру fprintf() ???

Добавлено через 53 секунды
int fprintf(FILE *, const char *fmt, ...);
Она должна быть в stdarg.h
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:41  [ТС] #38
Нету там, я же привёл в сообщение содержимое файла.
А что такое токены?
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:43 #39
Если не найдешь vprintf, нужно будет писать разбор форматной строки самому либо гуглить по ключевым словам "printf implementation"

Цитата Сообщение от Uklunok Посмотреть сообщение
Нету там, я же привёл в сообщение содержимое файла.
ну значить под твой контроллер стандартная библиотека кастрированная.
Токен - http://en.wikipedia.org/wiki/Token_(parser)#Token
0
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:49  [ТС] #40
Цитата Сообщение от Nameless One Посмотреть сообщение
ну значить под твой контроллер стандартная библиотека кастрированная.
Токен - http://en.wikipedia.org/wiki/Token_(parser)#Token
Да на вряд ли такое есть, больше времени проищу.
А на русском можно ссылочку по разбору строки?
И сложно это делается?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
05.06.2011, 12:50 #41
Uklunok, Хех. А это смотря какая строка. У printf довольно много спецификаторов.
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:54 #42
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Держи, я нагуглил это за тебя. Для embedded software. Есть вариант с stdarg и без stdarg. Я бы на твоем месте взял бы с stdarg.
http://www.menie.org/georges/embedded/. Там есть ссылка и на реализацию, поддерживающую плавающие числа.
3
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 12:58  [ТС] #43
Огоого сколько тут кодаО_о
0
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
05.06.2011, 12:59 #44
Uklunok, вот и разбирайся
1
Uklunok
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
05.06.2011, 13:02  [ТС] #45
static int print(char **out, const char *format, va_list args ) - эта ф-ция получается будет вместо vprintf()?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 13:02
Привет! Вот еще темы с ответами:

Не могу понять как исправить ошибку Warning: printf() [function.printf]: Too few arguments in Z:\home\ksards.ru\www\id\1.php on line 76 - PHP БД
Помогите связать бд с сайтом я новичок в этом вот код php &lt;?php do { printf(&quot;&lt;div class='blog'&gt;&lt;a href='2.php?id=%s'&gt;%s&lt;/a&gt;...

Узнать в ф-ции имя вызвавшей ф-ции - Python
Это возможно? Т.е. есть некая ф-ция debug(msg), передавать имя вызвавшей ее процедуры в параметрах не вариант, можно ли как-то внутри это...

DLL - как подменить функцию, используя самодельную DLL? - C++ Builder
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа (только exe), которая при определенном...

Перетаскивание формы за самодельную рамку - C#
Всем привет. Подскажите, убрал стандартную рамку у программы (FormBorderStyle = None) и сделал свою рамку из picturebox. Теперь я делаю...


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
05.06.2011, 13:02
Ответ Создать тему
Опции темы

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