Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
smileinshadow
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 21
#1

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции

30.01.2017, 16:45. Просмотров 846. Ответов 8

Написал код, в котором 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
 
 
using namespace std;
string cards();
void rules();
int numbers();
 
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    char quite = 'q';
    char rtr = 'r';
    char more = '+';
    char reb = '-';
 
 
 
    rules();
    
        
    cout << cards() << " ";
    
        
    
    _getch();
 
}
 
string cards()
{
    vector<string> name_cards;
    name_cards.push_back("Шесть черви");
    name_cards.push_back("Шесть буби");
    name_cards.push_back("Шесть пики");
    name_cards.push_back("Шесть крести");
 
    name_cards.push_back("Семь черви");
    name_cards.push_back("Семь буби");
    name_cards.push_back("Семь пики");
    name_cards.push_back("Семь крести");
 
    name_cards.push_back("Восемь черви");
    name_cards.push_back("Восемь буби");
    name_cards.push_back("Восемь пики");
    name_cards.push_back("Восемь крести");
 
    name_cards.push_back("Девять черви");
    name_cards.push_back("Девять буби");
    name_cards.push_back("Девять пики");
    name_cards.push_back("Девять крести");
 
    name_cards.push_back("Десять черви");
    name_cards.push_back("Десять буби");
    name_cards.push_back("Десять пики");
    name_cards.push_back("Десять крести");
 
    name_cards.push_back("Валет черви");
    name_cards.push_back("Валет буби");
    name_cards.push_back("Валет пики");
    name_cards.push_back("Валет крести");
 
    name_cards.push_back("Дама черви");
    name_cards.push_back("Дама буби");
    name_cards.push_back("Дама пики");
    name_cards.push_back("Дама крести");
 
    name_cards.push_back("Король черви");
    name_cards.push_back("Король буби");
    name_cards.push_back("Король пики");
    name_cards.push_back("Король крести");
 
    name_cards.push_back("Туз черви");
    name_cards.push_back("Туз буби");
    name_cards.push_back("Туз пики");
    name_cards.push_back("Туз крести");
    srand(static_cast<unsigned int>(time(0)));
    return name_cards[1 + rand() % 36];
}
void rules()
{
    cout << "\t**Добро пожаловать в игру 21 очко!\n";
    cout << "Чтобы выйграть вам нужно набрать 21 очко с карт.\n";
    cout << "У карты Валет количество очков равно 2\n";
    cout << "Дама равна трём, король четырм, а туз одиннадцати.\n";
    cout << "Управление: чтобы добавить карту введите +, чтобы сбросить -,\n";
    cout << "Чтобы повторить игру введите r, чтобы выйти q\n";
}
int numbers()
{
    int num;
    if (cards() == "Шесть черви" || "Шесть крести" || "Шесть пики" || "Шесть буби" )
        num = 6;
    else if  (cards() == "Семь черви" || "Семь крести" || "Семь пики" || "Семь буби")
          num = 7;
    else if (cards() == "Восемь черви" || "Восемь крести" || "Восемь пики" || "Восемь буби")
         num = 8;
    else if (cards() == "Девять черви" || "Девять крести" || "Девять пики" || "Девять буби")
          num = 9;
    else if (cards() == "Десять черви" || "Десять крести" || "Десять пики" || "Десять буби")
         num = 10;
    else if (cards() == "Валет черви" || "Валет крести" || "Валет пики" || "Валет буби")
         num = 2;
    else if (cards() == "Дама черви" || "Дама крести" || "Дама пики" || "Дама буби")
         num = 3;
    else if (cards() == "Король черви" || "Король крести" || "Король пики" || "Король буби")
         num = 4;
    else if (cards() == "Туз черви" || "Туз крести" || "Туз пики" || "Туз буби")
        num = 11;
    return num;
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2017, 16:45
Ответы с готовыми решениями:

Тип переменных в функции, передаваемой как параметр другой функции
есть функция static int filesort(const void *va, const void *vb) { ...

Использование функции как параметра другой функции
В задании указано, что функция P прибавляет значение функции ff к элементу...

Как вернуть больше одного значения из функции?
здрасти, как быть если функция должна возвратить не 1 значение а 2?

можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну задали в одной функции а использовали в другой... и как это реализовать?
можно ли в с++ вызвать переменную из одной функции в другую т.е. мы переменну...

Как правильно передать метод в качестве функции возврата?
Здравствуйте! Вот такая проблема, надо передать указатель на метод класса в...

8
zss
Модератор
Эксперт С++
7102 / 6630 / 4199
Регистрация: 18.12.2011
Сообщений: 17,488
Завершенные тесты: 1
30.01.2017, 17:15 #2
Вопрос непонятен.
Заметил только
Цитата Сообщение от smileinshadow Посмотреть сообщение
if (cards() == "Шесть черви" || "Шесть крести" || "Шесть пики" || "Шесть буби" )
Так нельзя
C++
1
2
3
4
5
string s=cards();
 if (s == "Шесть черви" 
   || s == "Шесть крести" 
   || s == "Шесть пики" 
   || s == "Шесть буби" )
0
smileinshadow
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 21
30.01.2017, 17:18  [ТС] #3
zss, попробую переформулировать. Допустим компилятор одно из рандомных значений из функции string cards() выводит "Семь черви". И я хотел бы отталкиваясь от этого значения через функцию int numbers() вывести соответствующее число.
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
30.01.2017, 17:36 #4
для этого numbers должен принимать какое то входное значение
C++
1
int numbers(std::str card_name)
внутри сравнивать как -
C++
1
 if (card_name == "Король черви" || "Король крести" || "Король пики" || "Король буби")
но естественно не так как у вас а по-нормальному как указали выше #2
0
smileinshadow
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 21
30.01.2017, 19:25  [ТС] #5
Raali, правильно ли я понял что должно получиться так?
C++
1
2
3
4
5
int numbers(string namecard)
{
    int num;
    namecard = cards();
    if (namecard == "Шесть черви" || "Шесть крести" || "Шесть пики" || "Шесть буби" )
:

Добавлено через 1 час 27 минут
По прежнему возвращает лишь шестерки, буд то бы игнорирует условия ветвления if else. Для теста вывожу через консоль в таком виде
C++
1
cout << cards() << " " << numbers(cards());
. Пожалуйста объясните в чем ошибка?
0
likehood
955 / 806 / 387
Регистрация: 25.12.2016
Сообщений: 2,669
Завершенные тесты: 3
30.01.2017, 21:42 #6
Лучший ответ Сообщение было отмечено smileinshadow как решение

Решение

Цитата Сообщение от smileinshadow Посмотреть сообщение
правильно ли я понял что должно получиться так?
Нет. Должно получиться так:
C++
1
2
3
4
int numbers(string card)
{
    int num;
    if (card == "Шесть черви" || card == "Шесть крести" || card == "Шесть пики" || card == "Шесть буби" )
Добавлено через 3 минуты
Впрочем, сам по себе используемый подход, основанный на сравнении строк, является порочным.
Лучше создать структуру с двумя полями: 1) масть, 2) значение. Или хотя бы задавать карту как строку из двух символов. Тогда функция numbers будет вообще не нужна, узнать старшинство карты можно будет непосредственно.

Добавлено через 1 минуту
Заметил в вашей программе ещё одну ошибку: функция srand вызывается при каждом вызове cards, а должна вызываться только один раз, где-то в начале программы.
1
smileinshadow
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 21
30.01.2017, 21:59  [ТС] #7
likehood, Спасибо за помощь, в данном случае пытаюсь практиковаться на функциях потому как эту тему не очень хорошо понял - потому решил прибегнуть к такому способу. К слову говоря как оказалось после перемещения функции srand компилятор стал вызывать рандомные числа потому приходится его вызывать лишь в теле функции cards. Вас не затруднит описать от чего приходится каждый раз прибегать к переменной в логическом "или"? Буду признателен.
0
likehood
955 / 806 / 387
Регистрация: 25.12.2016
Сообщений: 2,669
Завершенные тесты: 3
30.01.2017, 22:06 #8
Цитата Сообщение от smileinshadow Посмотреть сообщение
от чего приходится каждый раз прибегать к переменной в логическом "или"?
Такой синтаксис. Справа и слева от || должны стоять логические значения, которые получаются путём сравнения.
0
smileinshadow
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 21
30.01.2017, 22:08  [ТС] #9
likehood, Спасибо за разъяснение.
0
30.01.2017, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2017, 22:08

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include...

Вычислить значение функции аргумент которой вычисляется из другой кусочно заданной функции
Решите программу то я не знаю как:hysteric: Вычислить значение y в зависимости...

Получить указатель из функции и использовать его в другой функции
Подскажите пожалуйста как из функции использовать в функции main указатель?...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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