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

Функции с переменным количеством параметров, stdarg.h. Исправить код - C++

Восстановить пароль Регистрация
 
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
03.03.2014, 21:02     Функции с переменным количеством параметров, stdarg.h. Исправить код #1
Почему не работает? В итоге получается 0, а если в функции все что надо заменить с float на int, то работает правильно. В чем ошибка?

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
#include "stdafx.h"
#include <iostream>
using std::cout;
#include <conio.h>
#include <stdarg.h>
#include <iomanip>
using std::setprecision;
using std::ios;
using std::fixed;
 
float sum(int n, ...);
 
int main()
{
    cout << fixed << setprecision(3) << sum(5,1,2,3,4,5);
    getch();
    return 0;
}
 
float sum(int n, ...)
{
    va_list VL;
    float s = 0;
    va_start(VL, n);
    for (int i = 0; i < n; i++)
        s += va_arg(VL,float);
    return s;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 21:02     Функции с переменным количеством параметров, stdarg.h. Исправить код
Посмотрите здесь:

Функции по переменным количеством параметров C++
C++ функции, с переменным числом параметров
C++ Функция с переменным количеством параметров-оъектов
Функция с переменным количеством параметров C++
C++ Шаблон с переменным количеством параметров
C++ Функции с переменным числом параметров
Массив в функции с переменным количеством параметров C++
Функции с переменным количеством параметров в языке C ++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
03.03.2014, 22:26     Функции с переменным количеством параметров, stdarg.h. Исправить код #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Керра, две проблемы:
1) float при передаче через эллипсис расширяется до double (как и short, char до int)
2) ты передаешь целые числа, a ждешь float (не забываем, что эллипсис уничтожает контроль системы типов С++)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    cout << fixed << setprecision(3) << sum(5,1.f,2.f,3.f,4.f,5.f);
    return 0;
}
 
float sum(int n, ...)
{
    va_list VL;
    float s = 0;
    va_start(VL, n);
    for (int i = 0; i < n; i++)
        s += (float)va_arg(VL, double);
    va_end(VL);
    return s;
}
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,016
Записей в блоге: 10
Завершенные тесты: 1
03.03.2014, 22:34     Функции с переменным количеством параметров, stdarg.h. Исправить код #3
Ты передаёшь int, а пытаешься получить float. Проблема в этом.
Yandex
Объявления
03.03.2014, 22:34     Функции с переменным количеством параметров, stdarg.h. Исправить код
Ответ Создать тему

Метки
starg
Опции темы

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