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";
}
}
Является ли соответствующий тег 'C#' здесь? – Nico
Верните «союз». –
Функция не нуждается в параметре, хотя она будет иметь только 0 или 1 возвращаемые значения. Но ваш вопрос непонятен - есть ли у вас проблемы с написанием функции, которая возвращает «А» только в десятый раз? Или что-то другое? –