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

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

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

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

25.12.2013, 13:20. Просмотров 1242. Ответов 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 *'
И такой вопрос а какой вариант лучше,производительней или вообще никакой.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 13:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Return нескольких переменных (C++):

В чем разница между return и return false/true - C++
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста об етих операторах.. чем они...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,998
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
outoftime
║XLR8║
510 / 432 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
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
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.12.2013, 14:46 #4
outoftime, параметры шаблона при вызове можно не указывать в данном случае. Они будут выведены из типа аргумента.
А для возврата нескольких значений можно использовать std::tuple
1
imkerya
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 12
25.12.2013, 15:48 #5
Передавать переменные по ссылке.(т.е. их адрес)
1
BlackOwl
5 / 5 / 1
Регистрация: 23.12.2014
Сообщений: 90
28.06.2015, 17:02 #6
Юля_программист, насколько я вижу, все переменные одного типа значит можно записать в массив и вернуть массивом, или по ссылкам как сказали выше
1
goditsa8
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
28.06.2015, 17:37 #7
Еще можно структуру организовать для таких целей. Структуру возвращать можно.
1
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,459
28.06.2015, 22:54 #8
Юля_программист, хоть вы и получили в этом топике набор приемлемых вариантов решения, мне все-таки хочется обратить особое внимание на один момент.
Цитата Сообщение от Юля_программист Посмотреть сообщение
return r1,r2,r3
Знаете, у меня остатки шерсти встали дыбом! Вот подумайте. Вы вызываете функцию, например
C++
1
x = put(....);
А put делает тот самый замечательный ваш return. Ну и чем должен после этого стать x?
0
hoggy
Нарушитель
6587 / 2768 / 476
Регистрация: 15.11.2014
Сообщений: 6,112
Завершенные тесты: 1
28.06.2015, 22:59 #9
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?

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

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


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

Добавлено через 1 минуту
И при этом делает совсем не то, что говорящий имел в виду.
0
Max Dark
шКодер самоучка
1825 / 1627 / 592
Регистрация: 09.10.2013
Сообщений: 3,634
Записей в блоге: 6
Завершенные тесты: 2
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
S_el
2100 / 1611 / 308
Регистрация: 15.12.2013
Сообщений: 6,451
28.06.2015, 23:34 #12
Цитата Сообщение от Байт Посмотреть сообщение
Ну и чем должен после этого стать x?
Если не брать в расчет оператор запятая,то компилятор должен ошибку выдать.Как в Golang
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,677
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
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,459
29.06.2015, 09:08 #14
Цитата Сообщение от daslex Посмотреть сообщение
И никого не смутило, что
Да, судя по остальному, требовалось именно "выдернуть".
Цитата Сообщение от daslex Посмотреть сообщение
и что уже 2 года прошло....
Да, не обратил внимания. Конечно, за эти 2 года многое изменилось, ТС многому научилась, и мои нравоучения из поста 8 совершенно ни к чему.
Приношу ТС искренние извинения и желаю всяческих удач!
0
Юля_программист
468 / 123 / 19
Регистрация: 04.05.2012
Сообщений: 598
Записей в блоге: 1
29.06.2015, 14:35  [ТС] #15
Байт, daslex, S_el,
Всем спасибо за советы и ответы)на тот момент я действительно много не знала, но как и все я учусь. И довольно не плохо подтянула базовые знания. Это Вы можете посмотреть по статистке полезных сообщений и мои ответы, да и возросшая репутация, и лучшие ответы получены здесь в теме "с++ для начинающих".
До хорошего программиста мне далеко, конечно, но я учусь и этот форум и репутация говорят , что потихоньку все получаеться.
А так не по теме, но всё же хочется написать :
для меня это хороший измеритель моих умений, теперь я могу не только спрашивать, НО и ОТВЕЧАТЬ И ДАЖЕ ПОЛУЧАТЬ ЛУЧШИЕ ОТВЕТЫ. Да и спрашивать теперь я стараюсь только в крайнем случае, когда две недели безрезультатны)но за последние 1.5 года я научилась сама разбираться с задачами.
3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2015, 14:35
Привет! Вот еще темы с ответами:

Сравнение нескольких переменных типа стринг - 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;...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.06.2015, 14:35
Ответ Создать тему
Опции темы

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