Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
680 / 190 / 60
Регистрация: 04.05.2012
Сообщений: 879
Записей в блоге: 1
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Такой вопрос.

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

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 *'
И такой вопрос а какой вариант лучше,производительней или вообще никакой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2013, 13:20
Ответы с готовыми решениями:

Возврат нескольких переменных в return
Доброго времени суток, у меня такая проблема : в Form9 написал public int GiveO() {try {int...

Функция с одним return после цепочки if и без дополнительных переменных
Всем Привет! сделал функцию все работает хорошо, но преподаватель просит убрать переменную...

Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
package com.company; import java.io.Serializable; public class person implements Serializable {...

Объединение нескольких переменных
Нужна помощь. Даны переменные a=3 b=2 c=4 d=6 их значения необходимо вывести в поле Label таким...

32
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
25.12.2013, 13:25 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;
вы увидите что они изменились
2
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
25.12.2013, 14:26 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);
Более универсальный метод.
2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.12.2013, 14:46 4
outoftime, параметры шаблона при вызове можно не указывать в данном случае. Они будут выведены из типа аргумента.
А для возврата нескольких значений можно использовать std::tuple
1
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 12
25.12.2013, 15:48 5
Передавать переменные по ссылке.(т.е. их адрес)
1
7 / 7 / 3
Регистрация: 23.12.2014
Сообщений: 94
28.06.2015, 17:02 6
Юля_программист, насколько я вижу, все переменные одного типа значит можно записать в массив и вернуть массивом, или по ссылкам как сказали выше
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
28.06.2015, 17:37 7
Еще можно структуру организовать для таких целей. Структуру возвращать можно.
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
28.06.2015, 22:54 8
Юля_программист, хоть вы и получили в этом топике набор приемлемых вариантов решения, мне все-таки хочется обратить особое внимание на один момент.
Цитата Сообщение от Юля_программист Посмотреть сообщение
return r1,r2,r3
Знаете, у меня остатки шерсти встали дыбом! Вот подумайте. Вы вызываете функцию, например
C++
1
x = put(....);
А put делает тот самый замечательный ваш return. Ну и чем должен после этого стать x?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.06.2015, 22:59 9
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?

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

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


1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
28.06.2015, 23:30 10
Цитата Сообщение от hoggy Посмотреть сообщение
r3
Да, вы абсолютно правы.
Но, ИМХО, каша в голове у ТС все-таки порядочная.
Тут как раз тот случай, когда язык "умнее" на нем говорящего.

Добавлено через 1 минуту
И при этом делает совсем не то, что говорящий имел в виду.
0
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,260
Записей в блоге: 7
28.06.2015, 23:33 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
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
28.06.2015, 23:34 12
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?
Если не брать в расчет оператор запятая,то компилятор должен ошибку выдать.Как в Golang
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
29.06.2015, 06:02 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;
    }
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
29.06.2015, 09:08 14
Цитата Сообщение от daslex Посмотреть сообщение
И никого не смутило, что
Да, судя по остальному, требовалось именно "выдернуть".
Цитата Сообщение от daslex Посмотреть сообщение
и что уже 2 года прошло....
Да, не обратил внимания. Конечно, за эти 2 года многое изменилось, ТС многому научилась, и мои нравоучения из поста 8 совершенно ни к чему.
Приношу ТС искренние извинения и желаю всяческих удач!
0
680 / 190 / 60
Регистрация: 04.05.2012
Сообщений: 879
Записей в блоге: 1
29.06.2015, 14:35  [ТС] 15
Байт, daslex, S_el,
Всем спасибо за советы и ответы)на тот момент я действительно много не знала, но как и все я учусь. И довольно не плохо подтянула базовые знания. Это Вы можете посмотреть по статистке полезных сообщений и мои ответы, да и возросшая репутация, и лучшие ответы получены здесь в теме "с++ для начинающих".
До хорошего программиста мне далеко, конечно, но я учусь и этот форум и репутация говорят , что потихоньку все получаеться.
А так не по теме, но всё же хочется написать :
для меня это хороший измеритель моих умений, теперь я могу не только спрашивать, НО и ОТВЕЧАТЬ И ДАЖЕ ПОЛУЧАТЬ ЛУЧШИЕ ОТВЕТЫ. Да и спрашивать теперь я стараюсь только в крайнем случае, когда две недели безрезультатны)но за последние 1.5 года я научилась сама разбираться с задачами.
3
Kastaneda
29.06.2015, 16:39
  #16

Не по теме:

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

0
Croessmah
29.06.2015, 16:42
  #17

Не по теме:

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

0
Kastaneda
29.06.2015, 16:43
  #18

Не по теме:

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

0
Croessmah
29.06.2015, 16:45
  #19

Не по теме:

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

0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
29.06.2015, 16:51 20

Не по теме:

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



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

Не по теме:

8-)

0
29.06.2015, 16:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2015, 16:51
Помогаю со студенческими работами здесь

Функция нескольких переменных
Найти частные производные первого и второго порядка: z=e^((x^3)*(y^2)); найти частную производную...

Объявление нескольких переменных
Не знаю почему, но компилятор выдает такие ошибки на этот код. Код конструктораTime::Time() {...

Функция нескольких переменных
z=arctg(sqr(xy)) Найти частные производные. Ни как не пойму, как сделать :( Спасибо заранее!

Функции нескольких переменных
k=5; m=7


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru