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

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

Войти
Регистрация
Восстановить пароль
 
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
#1

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

10.01.2011, 00:59. Просмотров 837. Ответов 7
Метки нет (Все метки)

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 <iostream.h>
#include <conio.h>
 
int max(int k,...)
{
int *p=&k;
int maxi;
 
 
    for(;k!=0;k--)
    {
        if (maxi<(*p))
        {
            maxi=(*p);
        }
        p++;
    }
return maxi;
}
 
void main()
{
clrscr();
cout << "\nmax (8, 3, 5) = " << max (8, 3, 5);
cout << "\nmax (2, 9, 6) = "<< max (2, 9, 6);
cout << "\nmax (7, 4, 10, 11) = "<< max (7, 4, 10, 11);
getch();
}
подскажите, пожалуйста, в чем проблема ?

результат программы
max (8, 3, 5) = 335
max (2, 9, 6) = 9
max (7, 4, 10, 11) = 335
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2011, 00:59     Функции с переменным числом параметров
Посмотрите здесь:

C++ Функции с переменным числом параметров
C++ Функции с переменным числом параметров
Функции с переменным числом параметров C++
Работа функции с переменным числом параметров C++
C++ Функции с переменным числом параметров
C++ Подскажите пример функции с переменным числом параметров, в том числе 0
Функции с переменным числом параметров C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 01:07     Функции с переменным числом параметров #2
пример:
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
/* va_start example */
#include <stdio.h>
#include <stdarg.h>
 
void PrintFloats ( int amount, ...)
{
  int i;
  double val;
  printf ("Floats passed: ");
  va_list vl;
  va_start(vl,amount);
  for (i=0;i<amount;i++)
  {
    val=va_arg(vl,double);
    printf ("\t%.2f",val);
  }
  va_end(vl);
  printf ("\n");
}
 
int main ()
{
  PrintFloats (3,3.14159,2.71828,1.41421);
  return 0;
}
LAans
1 / 1 / 0
Регистрация: 29.04.2010
Сообщений: 46
10.01.2011, 01:35  [ТС]     Функции с переменным числом параметров #3
спасибо, конечно
но пока не могу понять чем этот пример может помочь

мне надо сделать с помощью указателей и ссылок , я так понимаю в них проблема что выводит такой результат , а пример сделан без их использования (
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 01:48     Функции с переменным числом параметров #4
Цитата Сообщение от LAans Посмотреть сообщение
не могу понять чем этот пример может помочь
сочувствую

то, что вы пишите - это Си вариант. а в Си, как известно, единственный способ получить доступ к списку аргументов - использовать va_start, va_list, va_arg, va_end.

так что курите, батенька.

Добавлено через 1 минуту
вам случаем не массив в функцию передавать нужно?
Байт
Эксперт C
15289 / 9691 / 1439
Регистрация: 24.12.2010
Сообщений: 18,034
10.01.2011, 02:57     Функции с переменным числом параметров #5
LAans, в твоем коде нет начального присвоения maxi
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
10.01.2011, 03:22     Функции с переменным числом параметров #6
niXman, Правда единственный? Серьезно?
Ммм... Но честно говоря не знаю как на это будет реагировать Си. На codepad.org реагирует странно


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void foo(int t,...)
{
    int* p=&t;
    while(*(p) != 0)
        printf("%d\n", *(p++));
}
 
int main(void)
{
    foo(1,2,3,4,5,6,7,0);
    return 0;
}
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
10.01.2011, 03:25     Функции с переменным числом параметров #7
niXman, серьёзно, батенька, Вы что то напутали)
Вот мой вариант...сто лет в C++ (а тем более в его подмножестве C) не практиковался)))

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
34
35
36
37
#include <iostream>
using namespace::std;
 
int max(int k, ...) {   
    int amount = k; /* первый аргумент нашей функции - количество
                       передаваемых в неё аргументов */
    
    // проверка количества аргументов                  
    if(k < 1) {
      cout << "Usage: max( number_of_arguments, arg1, arg2, ... [argN] )" << endl;
      return 0;
    }
                       
    int *p = &k;
    p++; // указываем на первый аргумент, после аргумента - количества
    
    int maxi = *p; /* по умалчанию присваиваем максимальное
                      значение - первый из всех аргументов */
        
    for(int i = 0; i < amount; i++) {
      if(maxi < *p) {
        maxi = *p;
      }
      
      p++;
    }
    
    return maxi;
}
 
int main() {
  cout << "max (8, 3, 5) = " << max(3, 8, 3, 5) << endl;
  cout << "max (2, 9, 6) = "<< max(0) << endl;
  cout << "max (7, 4, 10, 11) = "<< max(4, 7, 4, 10, 11) << endl;
  
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2011, 12:14     Функции с переменным числом параметров
Еще ссылки по теме:

C++ Функции с переменным числом параметров
Функции с переменным числом параметров C++
C++ Поддерживает ли текущий стандарт функции с переменным числом параметров?
Функции с переменным числом параметров C++
C++ Функции с переменным числом параметров

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

Или воспользуйтесь поиском по форуму:
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.01.2011, 12:14     Функции с переменным числом параметров #8
ForEveR, G-Cat, в данном случае вы правы. я всего дважды писал реализацию функции с переменным числом аргументов, и оба раза, как сказано в документации, с использованием va_start, va_list, va_arg, va_end.

но остается не ясным вопрос о переносимости такого кода.
Yandex
Объявления
10.01.2011, 12:14     Функции с переменным числом параметров
Ответ Создать тему
Опции темы

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