Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 23:24   #1
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию копия printf

Хочу написать функцию, которая будет работать как функция printf, но выводила помимо строки текста еще и символ перехода на новую строку. Вот что у меня получилось:

Код:
#include <stdio.h>

void pr(char *str,...)
{
    printf(str,...);
    printf("\n");


}

int main()
{
    pr("%d",5);
    getchar();
    return 1;
}
Однако компилятор не дает скомпилировать программу с таком логом:
6 C:\Users\Ïðèçðàê\Documents\C\just_t est.cpp expected primary-expression before '...' token
Где я ошибся? Заранее спасибо
rus_phantom вне форума Ответить с цитированием
Старый 04.11.2011, 00:19   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ошиблись в том, что printf нужно передавать аргументы, а не многоточие.
Abstraction вне форума Ответить с цитированием
Старый 04.11.2011, 00:22   #3
rus_phantom
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 16
По умолчанию

А как это сделать? Что нужно исправить?
rus_phantom вне форума Ответить с цитированием
Старый 04.11.2011, 00:48   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Я не знаю (ну, кроме как вручную парсить строку и выстраивать стек для повторного вызова). Беда с этими списками аргументов.

Или писать на заданное число параметров выражения вида
#define pr(a,b) do{printf(a,b); printf("\n");} while(0)
Или что-то в духе
#define newLine \n
#define pr(str) printf(#str##newLine
и вызывать
pr("%d"),5);
Abstraction вне форума Ответить с цитированием
Старый 04.11.2011, 17:58   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Abstraction,
Код:
#define pr(a,b) do{printf(a,b); printf("\n");} while(0)
#define pr(a, b) printf(a, b); putchar('\n')
Код:
#define pr(str) printf(#str##newLine
#define pr(str) printf(str##"\n"
И зачем так извращаться? Есть же замечательная функция vprintf: http://www.cplusplus.com/reference/c...stdio/vprintf/
Смотрим пример и добавляем putchar('\n') в конец.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 04.11.2011, 18:42   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В первом случае Ваш вариант плох тем, что породит неверный результат при
Код:
if(a>0) pr("%d", a);
Abstraction вне форума Ответить с цитированием
Старый 04.11.2011, 19:01   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Да, не заметил.
Код:
#define pr(a, b) { printf(a, b); putchar('\n'); }
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по printf Syuf Общие вопросы C/C++ 10 13.09.2011 21:24
Резервная копия smoky Microsoft Office Access 4 02.05.2011 22:04
printf stenl1 Общие вопросы C/C++ 8 03.01.2011 12:26
printf zmey31313 Помощь студентам 4 13.01.2010 18:29
unicode и printf Legat Общие вопросы C/C++ 9 06.07.2008 13:41