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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Юля_программист
463 / 118 / 17
Регистрация: 04.05.2012
Сообщений: 587
Записей в блоге: 1
#1

Return нескольких переменных - C++

25.12.2013, 13:20. Просмотров 1204. Ответов 32
Метки нет (Все метки)

Здравствуйте!
Такой вопрос.

Есть часть кода для ввода переменных

C++
1
2
3
4
5
6
7
8
....
 cout<<"r1=";
  cin>>r1;
  cout<<"r2=";
  cin>>r2;
   cout<<"\nb=";
   cin>>b;
....
Хочу переделать под функцию,делаю так.

C++
1
2
3
4
5
6
7
8
9
10
double put(double r1,double r2,double b){
 cout<<"r1=";
  cin>>r1;
  cout<<"r2=";
  cin>>r2;
   cout<<"\nb=";
   cin>>b;
 
return r1,r2,r3
}
Но возникает вопрос,как потом работать с этими значениями?Ведь это три переменные,с которыми мне надо в программе работать, например r1 и r2 надо сравнивать, вот у меня вопрос как потомих от туда выдернуть.
Я просто не знаю так вообще можно делать или это плохой стиль.

Есть и другой вариант.

C++
1
2
3
4
5
double put(double x,char name[2]){
  cout<<name<<"=";
  cin>>x;
  return x;
}
А тут выдает ошибку.
Bash
1
Cannot convert 'int' to 'char *'
И такой вопрос а какой вариант лучше,производительней или вообще никакой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 13:20     Return нескольких переменных
Посмотрите здесь:

Функция от нескольких переменных - C++
Как задать функцию, зависящую от двух переменных. Есть массив точек x и y, нужно вычислить значение функции f в каждой из этих точек. Есть...

Функции нескольких переменных в С++ - C++
Есть программа, в которой есть функция, вернее две. В программе ошибок нет, а вот сама функция(вторая) выдает ошибку. #include...

Наследование нескольких переменных - C++
Имеются 3 класса (computer, pc, pda). pc должен наследовать от computer 2 переменных, а pda от pc его 2 переменных и те 2 что он наследует...

Обнуление сразу нескольких переменных - C++
У меня есть программа, в которой используется 5 переменных типа int. Что бы не создавать намного больше переменных можно ли написать...

Объедение нескольких переменных в одну - C++
Есть массив numbers = {1,2,3}, и нужно сделать так ,чтобы переменная x была равна трем ячейкам этого массива (т.е 123). Как это сделать?

Сравнение нескольких переменных типа стринг - C++
Есть код, в котором нужно сравнивать 3 временных промежутка, и по результатом сравнения выводит, как не странно, результат. Все бы хорошо,...

Ввод нескольких переменных разделенных пробелами - C++
#include &quot;std_lib_facilities.h&quot; int main() { cout &lt;&lt; &quot;Vvod: &quot;; int lval = 0; int rval; char op; cin &gt;&gt;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
25.12.2013, 13:25     Return нескольких переменных #2
Цитата Сообщение от Юля_программист Посмотреть сообщение
return r1,r2,r3
так нельзя, функция может возвращать только 1 значение return x; к примеру

если вы хотите вызывая функцию изменить несколько переменных, то передавайте их в функцию по ссылке, в вашем случае это выглядит так
Цитата Сообщение от Юля_программист Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
void put(double& r1,double& r2,double& b)
{ 
cout<<"r1="; 
cin>>r1; 
cout<<"r2="; 
cin>>r2; 
cout<<"\nb="; 
cin>>b;
}
после вызова функции к примеру
C++
1
2
3
double a=0,b=0,c=0;
put(a,b,c);
cout<<a<<b<<c;
вы увидите что они изменились
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
25.12.2013, 14:26     Return нескольких переменных #3
C++
1
2
3
4
5
6
7
8
void read(const char *request, double &ref) {
    std::cout << request;
    std::cin >> ref;
}
...
read("r1 = ", r1);
read("r2 = ", r2);
read("b = ",  b);
Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<class T>
void read(const char *request, T &ref) {
    std::cout << request;
    std::cin >> ref;
}
...
int r1;
double r2;
std::string b;
read<int>("r1 = ", r1);
read<double>("r2 = ", r2);
read<std::string>("b = ",  b);
Более универсальный метод.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.12.2013, 14:46     Return нескольких переменных #4
outoftime, параметры шаблона при вызове можно не указывать в данном случае. Они будут выведены из типа аргумента.
А для возврата нескольких значений можно использовать std::tuple
imkerya
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 12
25.12.2013, 15:48     Return нескольких переменных #5
Передавать переменные по ссылке.(т.е. их адрес)
BlackOwl
5 / 5 / 1
Регистрация: 23.12.2014
Сообщений: 90
28.06.2015, 17:02     Return нескольких переменных #6
Юля_программист, насколько я вижу, все переменные одного типа значит можно записать в массив и вернуть массивом, или по ссылкам как сказали выше
goditsa8
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
28.06.2015, 17:37     Return нескольких переменных #7
Еще можно структуру организовать для таких целей. Структуру возвращать можно.
Байт
Эксперт C
15833 / 10160 / 1522
Регистрация: 24.12.2010
Сообщений: 19,148
28.06.2015, 22:54     Return нескольких переменных #8
Юля_программист, хоть вы и получили в этом топике набор приемлемых вариантов решения, мне все-таки хочется обратить особое внимание на один момент.
Цитата Сообщение от Юля_программист Посмотреть сообщение
return r1,r2,r3
Знаете, у меня остатки шерсти встали дыбом! Вот подумайте. Вы вызываете функцию, например
C++
1
x = put(....);
А put делает тот самый замечательный ваш return. Ну и чем должен после этого стать x?
hoggy
6420 / 2638 / 458
Регистрация: 15.11.2014
Сообщений: 5,826
Завершенные тесты: 1
28.06.2015, 22:59     Return нескольких переменных #9
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?

Кликните здесь для просмотра всего текста
r3

Кликните здесь для просмотра всего текста
оператор запятая


Байт
Эксперт C
15833 / 10160 / 1522
Регистрация: 24.12.2010
Сообщений: 19,148
28.06.2015, 23:30     Return нескольких переменных #10
Цитата Сообщение от hoggy Посмотреть сообщение
r3
Да, вы абсолютно правы.
Но, ИМХО, каша в голове у ТС все-таки порядочная.
Тут как раз тот случай, когда язык "умнее" на нем говорящего.

Добавлено через 1 минуту
И при этом делает совсем не то, что говорящий имел в виду.
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
28.06.2015, 23:33     Return нескольких переменных #11
tuple(aka кортеж)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <tuple>
 
auto treturn() {
    return std::make_tuple(1, 'x');
}
 
 
void test() {
    char c;
    std::tie(std::ignore, c) = treturn();
    std::cout << c << std::endl;
}
 
int main() {
    test();
    return 0;
}
http://ideone.com/p4OoFb
S_el
2092 / 1599 / 306
Регистрация: 15.12.2013
Сообщений: 6,427
28.06.2015, 23:34     Return нескольких переменных #12
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?
Если не брать в расчет оператор запятая,то компилятор должен ошибку выдать.Как в Golang
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
29.06.2015, 06:02     Return нескольких переменных #13
И никого не смутило, что
Цитата Сообщение от Юля_программист Посмотреть сообщение
выдернуть
не вернуть
и что уже 2 года прошло.... и что ей полностью ответили уже через 5 минут

Ну и чем должен после этого стать x?
В некоторых компиляторах с маленьким исправлением он может стать обычной структурой, причем смысл не нарушится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    #include <iostream>
    
    using namespace std;
    struct X{  double x, y, z;};
 
 
   X put(double r1,double r2,double b){
     cout<<"r1=";
     cin>>r1;
     cout<<"r2=";
     cin>>r2;
     cout<<"\nb=";
     cin>>b;
     return {r1,r2,b};
    }
 
    int main(){
        double a,b,c;
 
        X x=put(a,b,c);
 
        cout<<x.x<<"  "<<x.y<<"  "<<x.z;
    }
Байт
Эксперт C
15833 / 10160 / 1522
Регистрация: 24.12.2010
Сообщений: 19,148
29.06.2015, 09:08     Return нескольких переменных #14
Цитата Сообщение от daslex Посмотреть сообщение
И никого не смутило, что
Да, судя по остальному, требовалось именно "выдернуть".
Цитата Сообщение от daslex Посмотреть сообщение
и что уже 2 года прошло....
Да, не обратил внимания. Конечно, за эти 2 года многое изменилось, ТС многому научилась, и мои нравоучения из поста 8 совершенно ни к чему.
Приношу ТС искренние извинения и желаю всяческих удач!
Юля_программист
463 / 118 / 17
Регистрация: 04.05.2012
Сообщений: 587
Записей в блоге: 1
29.06.2015, 14:35  [ТС]     Return нескольких переменных #15
Байт, daslex, S_el,
Всем спасибо за советы и ответы)на тот момент я действительно много не знала, но как и все я учусь. И довольно не плохо подтянула базовые знания. Это Вы можете посмотреть по статистке полезных сообщений и мои ответы, да и возросшая репутация, и лучшие ответы получены здесь в теме "с++ для начинающих".
До хорошего программиста мне далеко, конечно, но я учусь и этот форум и репутация говорят , что потихоньку все получаеться.
А так не по теме, но всё же хочется написать :
для меня это хороший измеритель моих умений, теперь я могу не только спрашивать, НО и ОТВЕЧАТЬ И ДАЖЕ ПОЛУЧАТЬ ЛУЧШИЕ ОТВЕТЫ. Да и спрашивать теперь я стараюсь только в крайнем случае, когда две недели безрезультатны)но за последние 1.5 года я научилась сама разбираться с задачами.
Kastaneda
29.06.2015, 16:39
  #16

Не по теме:

Юля_программист, молодец! Еще бы тся/ться подтянула и было бы совсем хорошо

Croessmah
29.06.2015, 16:42
  #17

Не по теме:

Kastaneda, не приставай к людям

Kastaneda
29.06.2015, 16:43
  #18

Не по теме:

Croessmah, так глаза же режет

Croessmah
29.06.2015, 16:45
  #19

Не по теме:

Kastaneda, очки ошибкозащитные одевать надо

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2015, 16:51     Return нескольких переменных
Еще ссылки по теме:

Построить линейный список из нескольких динамических переменных - C++
Построить линейный список из нескольких динамических переменных, содержащих вводимые целые числа. Вычислить количество совпадающих...

Построение таблицы истинности булевой функции от нескольких переменных - C++
Перечитал весь форум, но так и не нашел решения данной задачи, помогите пожалуйста. Нужно построить таблицу истинности для булевой...

Оператор cin. Ввод нескольких переменных через делитель - C++
Всем доброго времени суток. Я начинаю работать с C++ и столкнулся с такой проблемой при написании программы. Мне надо ввести в консольном...

Как вернуть значение нескольких переменных в точку вызова функции - C++
Подскажите пожалуйста)

Ошибка при использовании нескольких переменных с одним именем в разных уровнях вложенности циклов for - C++
Почему когда создаешь цикл фор по 2 раза и больше раз,и объявляешь там одну и ту же переменную(с одним названием),то не выдаёт ошибку?


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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
29.06.2015, 16:51     Return нескольких переменных #20

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
одевать
Croessmah, надевать



Добавлено через 38 секунд

Не по теме:

Yandex
Объявления
29.06.2015, 16:51     Return нескольких переменных
Ответ Создать тему
Опции темы

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