переменная не считается, даже если функция вызывается снова и снова - PullRequest
0 голосов
/ 08 ноября 2011

Я хочу, чтобы переменная "minne" подсчитывалась вверх один раз, когда я запускаю функцию "multi", а затем выводю ее обратно на экран в главной функции. Это не происходит, однако, я застрял на том, чтобы сказать мне, что я использовал функцию «0» снова и снова. Это почему?

//Multi

#include <iostream>


//Deklarerar variablar
int a,b,x, minne;

//Deklarerar funktioner
int multi(int a, int b);

int main(void)
{
  using std::cout;
  using std::cin; 

  while(1 < 2)
  {
  cout << "Ge mig ett nummer som du vill multiplicera:\n"; 
  cin >> a;
  cout << "\n Och ett till tack: \n";
  cin >> b;

  multi(a,b);

  cout << "\n Summan av dessa tal är: " << x << "\n";
  cout << "You have called the function: " << minne << " times.\n";
  }

  return 0;
}

int multi(int a, int b)
{
  x = a * b;

  int minne = minne + 1;

  return x, minne;
}

Ответы [ 5 ]

2 голосов
/ 08 ноября 2011

Это потому, что у вас объявлен глобальный minne , а функция multi также объявляет локальный minne , который скрывает глобальный minne

1 голос
/ 08 ноября 2011
  1. Вы можете вернуть только одну переменную из функции.
  2. Переменная minne в main() равна 0, поскольку ее область действия является глобальной, и она автоматически инициализируется с 0. minne в multi() функция является локальной и "создается" каждый раз, когда вы вызываете эту функцию (уничтожается в функция выхода).

То, что вы хотите сделать, это:

//Multi

#include <iostream>


//Deklarerar variablar
int a,b,x;
static int minne;

//Deklarerar funktioner
int multi(int a, int b);

int main(void)
{
  using std::cout;
  using std::cin; 

  while(1 < 2)
  {
  cout << "Ge mig ett nummer som du vill multiplicera:\n"; 
  cin >> a;
  cout << "\n Och ett till tack: \n";
  cin >> b;

  multi(a,b);

  cout << "\n Summan av dessa tal är: " << x << "\n";
  cout << "You have called the function: " << minne << " times.\n";
  }

  return 0;
}

int multi(int a, int b)
{
  x = a * b;

  minne = minne + 1;

  return x;
}
1 голос
/ 08 ноября 2011

Вы скрываете глобальный minne с вашим локальным int minne - избавьтесь от int и просто напишите minne = minne + 1 или даже просто ++minne. Кроме того, вам не нужно ничего возвращать из функции, поскольку вы не используете результат.

0 голосов
/ 08 ноября 2011

Потому что минна внутри мульти не та, что снаружи.Вы объявили его как переменную local для multi, это та, которая увеличивается и затем теряется при возврате

0 голосов
/ 08 ноября 2011

Вы переопределяете его.

Вместо

int minne = minne + 1;

У

minne = minne + 1;

Создание локальной переменной с тем же именем, что и у глобальной, затеняет глобальную.

Кроме того, какой смысл в вашем заявлении? Что вы пытаетесь сделать, делая return x, minne;? И вы даже не проверяете возвращаемое значение вообще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...