Как получить значение из предыдущего вызова функции, используя параметр по умолчанию?

#c #function #static

#c #функция #статический

Вопрос:

Как это работает

функция main вызовет Square() со значением int, где оно будет умножено на себя и возвращено в main . Однако, если параметры не указаны, то предыдущее значение int будет увеличено и использовано. Если указано значение 5, затем возвращаю 25, тогда я не добавляю параметр и снова вызываю функцию, она вернет квадрат 5 1, поэтому я получу 36, затем, если следующий вызов не имеет параметра, я получу квадрат 7, который равен 49.

Проблема

Здесь я объявил static int lastN, чтобы принимать значение n первого вызова. Если в следующем вызове нет параметров, переданных в square() , тогда unsigned int n будет равно -1, а lastN , в которых хранится предыдущее значение параметра n (в данном случае 5), затем lastN будет автоматически увеличен, и квадрат lastN будет возвращен. Однако, похоже, что статическая переменная не работает, я продолжаю получать 1 без параметров, я не очень уверен, как получить предыдущее значение со статической переменной.

 #include <iostream>

using namespace std;

int square(unsigned int n=-1)
{
   static int lastN;
    if(n==-1)
    {
        lastN =1;
        return (lastN)*(lastN);
    }

    lastN=n;
   return n*n;
}

void main () {
  
       cout <<"Value: "<< square(5) << endl;
} 
 

Спасибо за ответы. Хорошо, чтобы прояснить ситуацию, мой инструктор сказал мне использовать -1 для значения по умолчанию, чтобы, если в функцию не были переданы никакие параметры, тогда значение по умолчанию определенно не будет unsigned int . Если нет, если я использую положительное значение, например 10, в качестве значения по умолчанию, тогда возникают проблемы, когда мой инструктор передает 10 в качестве параметра для тестирования кода. Если я введу 5, lastN будет равно 5, а возвращенный квадрат 25, то для следующего вызова я не буду вводить какие-либо параметры в вызов функции для int square(),

 void main () {

       cout <<"Value: "<< square() << endl; //no parameter
} 
 

вместо того, чтобы увеличивать предыдущее значение до 6 и возвращать квадрат 6, я получаю

Значение: 1

Нажмите любую клавишу, чтобы продолжить…

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

Комментарии:

1. Это не компилируется из-за вашего void main , что должно быть int main . Однако, даже если это исправлено и square() вызвано впоследствии, все работает нормально. Какой компилятор вы используете, как вы его вызываете и каков на самом деле код, который предположительно работает не так, как ожидалось?

2. Кажется, работает так, как ожидалось: ideone.com/R7bvYI

3. «Я продолжаю получать 1 без параметров» Я подозреваю, что это крайний случай… вы пробовали сначала вызвать его с помощью чего-нибудь?

4. Вы должны инициализировать переменную lstN в первый раз: static int lastN = 0;

5. ваш код работает… пожалуйста, покажите какой-нибудь фрагмент кода о том, как вы вызываете функцию и какой компилятор вы используете?