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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 22:04   #11
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
#include <iostream>
#include <cstdarg>


int sum(short count, ...)
{
    int s = 0;

	 va_list ap;
	 va_start(ap, count);

    for(int i = 1; i <= count; i++)
        std::cout<<va_arg(ap, int) << " ";

	 va_end(ap);

	
    return s;
}


int main()
{
	 std::cout << sum(7, 20, (unsigned short)30, (long long)40, (long)50, 60, 'f', 'q') << std::endl;   
	 std::system("pause");
}
output: 20 30 40 0 50 60 102 0

я так понимаю 0 50 это один long long, а почему вместо последней переменной 0 не сильно понятно. Причем если увеличить 1 аргумент (число аргументов) на 1 то выводится правильно последняя переменная а за ней опять 0 есть
20 30 40 0 50 60 102 113 0
ascii f -> 102 q-> 113
rUs_LAN вне форума Ответить с цитированием
Старый 09.02.2012, 22:13   #12
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
Код:
#include <iostream>
#include <cstdarg>


int sum(short count, ...)
{
    int s = 0;

	 va_list ap;
	 va_start(ap, count);

    for(int i = 1; i <= count; i++)
        std::cout<<va_arg(ap, int) << " ";

	 va_end(ap);

	
    return s;
}


int main()
{
	 std::cout << sum(7, 20, (unsigned short)30, (long long)40, (long)50, 60, 'f', 'q') << std::endl;   
	 std::system("pause");
}
output: 20 30 40 0 50 60 102 0

я так понимаю 0 50 это один long long, а почему вместо последней переменной 0 не сильно понятно. Причем если увеличить 1 аргумент (число аргументов) на 1 то выводится правильно последняя переменная а за ней опять 0 есть
20 30 40 0 50 60 102 113 0
ascii f -> 102 q-> 113

Это потому что в main вы выводите результат работы функции sum, а этим результатом является значение переменной s, которое инициализируется 0.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 09.02.2012, 22:21   #13
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

действительно, я и забыл об этом.
rUs_LAN вне форума Ответить с цитированием
Старый 09.02.2012, 22:37   #14
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Но в любом случае мы убедились, что программа будет обрабатывать значения неверно, если не приводить каждый параметр к нужному типу с помощью va_arg.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Варнинги в функциях с переменным числом параметров guz Общие вопросы C/C++ 0 15.11.2010 13:36
функция с переменным числом параметров Veselyn Общие вопросы C/C++ 1 08.04.2010 16:36
Функция с переменным числом параметров С++ [CODER] Помощь студентам 3 22.03.2010 03:58
Функции с переменным числом параметров Matr1x Общие вопросы C/C++ 2 07.01.2010 16:55
Процедуры с переменным числом параметров Pascal Сергей089 Помощь студентам 2 04.04.2009 19:47