2015-06-12 7 views
-1

Мне нужно сделать функцию, давайте назовите ее fun1, которая вернет 2 значения. Он вернет A на каждые 10-й раз, иначе он вернется B.Функция для возврата разных значений C++

Затем в другой функции, позволяет называть его fun2, мне нужно проверить if(fun1=="A") return aVariableIneed; else return bVariableIneed;

Использование строки/INT/независимо функцию, которая возвращает значение не работает для меня, так как он всегда нужен параметр и возвращает один и только один. Я считаю, что пустота - это путь. Я думал об использовании массивов, но я не настолько уверен в этом.

Заранее спасибо.

+0

Является ли соответствующий тег 'C#' здесь? – Nico

+0

Верните «союз». –

+2

Функция не нуждается в параметре, хотя она будет иметь только 0 или 1 возвращаемые значения. Но ваш вопрос непонятен - есть ли у вас проблемы с написанием функции, которая возвращает «А» только в десятый раз? Или что-то другое? –

ответ

1

Вы можете использовать pass by reference для возврата значений в ваши параметры.

void fun1(int &firstReturnVal, int &secondReturnVal, int pass) { 
    firstReturnVal = ...; // will be viewable by caller 
    secondReturnVal = ...; // will be viewable by caller 
} 

int main() { 
    int a, b; 
    fun1(a, b, 2); 
    std::cout << "return values: " << a << b << endl; 
} 
+0

Это лучший способ WAAAY, чем я опубликовал. Когда он узнает об управлении памятью и скорости, это будет лучше. –

1

«Он вернет А на каждые 10-й раз, иначе он вернет Б.».

Если вы хотите вернуть только одно значение за раз, но помните, сколько раз функция уже была вызвана, то, что вы ищете, является статической переменной. Вы можете использовать эту статическую переменную, которая поддерживает свое значение между вызовами, чтобы подсчитать, сколько раз функция уже была вызвана, а затем использовать оператор if-else, чтобы определить, какой из них нужно вернуть.

Если вы хотите вернуть более одного значения за один раз, нет никакого способа сделать это, за исключением возврата массива (который вернет, действительно, только один элемент, указатель на массив, но вы можете сохранить как многие элементы, как вы хотите в этом массиве, а затем извлекаете их вне функции)

1
int fun1() 
{ 
    static int times = 0; 
    times++; 
    if(times % 10 == 0) 
    { 
     //return 10 if on multiples of 10 
     return 10; 
    } 

    //return something else. 
    return 1; 
} 

Для сложных вещей используйте другое.

Я думаю, что это то, что вам нужно, но вы можете просмотреть Static и все, что выглядит незнакомым. Ваша школа/tut/teacher дает только минимальный минимум, необходимый для решения заданий, а затем учит «простой путь» после обычной практики.

+1

Вы забыли прирастить 'times' – Unda

+1

lol да, а мой == также был грязным, thx –

0

C++ - это строго типизированный язык, поэтому первое, что вам нужно определить, - это «A "и" B "являются одним и тем же типом. У вас не может быть функции, которая возвращает две разные вещи без каких-либо махинаций, если эти вещи не могут быть легко преобразованы.

long f(bool condition) { 
    if (condition) 
     return 2.0; // type double 
    else 
     return 1; // type int 
} 

Компилятор, вероятно, генерирует предупреждения об этом коде, но он будет скомпилирован. Однако возвращаемое значение определяется печатью пальца функции: эта функция возвращает long, поэтому 2.0 преобразуется в 2 и 2 преобразуется из int в long.

int f(bool condition) { 
    if (condition) 
     return 1; 
    else 
     return "hello"; // illegal: no conversion possible 
} 

Следующие: Как эти символы, заданные представления символа ('A') строка ("A") или переменная, определенные в другом месте и с именем заглавных А (A).

Я могу только предположить, но похоже, что вы хотите персонажа, 'A'. Если вы знакомы с другими языками, такими как Python, вы можете не понимать, что существует большая разница между символом A и строка, содержащая символ A, 'A' vs "A".

В зависимости, как рано вы находитесь в курсе, вполне вероятно, что вам нужно что-то вроде этого:

int times = 0; // caveat: this value can become negative. 
// caveat: this value can only hold positive numbers 0 thru 2^31 

char fn1() { 
    ++times; 
    if (times < 10) 
     return 'A'; 
    else { 
     //times = 0; // reset for next time 
     return 'B'; 
    } 
} 

Мы не знаем точно, нужен ли times = 0. Если бы это было так, я бы ожидал, что задача будет «раз в 10 раз», а не просто «и в десятый раз».

Теперь мы можем написать fn2.

int fn2() { 
    if (fn1() == 'A') { 
     return aVariableINeed; 
    } else { 
     return bVariableINeed; 
    } 
} 

и мы можем поставить все это вместе в программу, как это:

#include <iostream> 

int aVariableINeed = 10; 
int bVariableINeed = 20; 

int times = 0; 

char fn1() { 
    ++times; 
    if (times < 10) 
     return 'A'; 
    else { 
     return 'B'; 
    } 
} 

int fn2() { 
    if (fn1() == 'A') { 
     return aVariableINeed; 
    } else { 
     return bVariableINeed; 
    } 
} 

int main() { 
    for (int i = 0; i < 10; ++i) { 
     std::cout << i << ": " << fn2() << "\n"; 
    } 
} 

Это, однако, не здоровый, современный C++. Это «то, что ваш профессор может искать на вашей сцене».

#include <iostream> 
#include <algorithm> 

// Returns "first" for the first N times and then returns "second. 
// Thus Countdown('A', 'B', 10) returns 'A' 9 times and then 'B' the 10th. 
class Countdown 
{ 
    char m_first, m_second; 
    size_t m_times = 0; // How many times we've displayed 
public: 
    Countdown(char first_, char second_, size_t times_) noexcept 
     : m_first(first_), m_second(second_) 
     , m_times(std::max(times_, size_t(1)) - 1) 
     { 
     } 

    char first() const { return m_first; } 
    char second() const { return m_second; } 

    char next() noexcept { 
     if (m_times > 0) { 
      --m_times; 
      return m_first; 
     } 
     return m_second; 
    } 
}; 

int fn2(Countdown& countdown, int aVariable, int bVariable) { 
    return (countdown.next() != countdown.second()) 
     ? aVariable : bVariable; 
} 

int main() 
{ 
    Countdown countdown('A', 'B', 10); 
    for (size_t i = 1; i <= 10; ++i) { 
     std::cout << i << ": " << fn2(countdown, 10, 20) << "\n"; 
    } 
}