#c #function #variables
#c #функция #переменные
Вопрос:
Я хочу, чтобы переменная «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;
}
Комментарии:
1. Разве ваш компилятор не предупреждает об этом?
int minne = minne 1
«использует» неинициализированную переменную (да, локальную!). Исправьте настройки сборки!2. И я не совсем уверен, чего
while (1 < 2)
илиreturn x, minne
предполагается достичь..3. Вам следует включить предупреждения компилятора на максимальных настройках и инвестировать в отладчик. StackOverflow — очень медленный процесс отладки кода.
4. @Tomalakgeret’kal Я бы отдал ему должное за то, что он придумал
while (1 <2)
бесконечный цикл. Не уверен, как выглядел первый, который я написал. @Adrian while(true) или while(1) работают так же хорошо и являются более традиционными. Оптимизировано независимо, но не так шокирующе для других.
Ответ №1:
Это потому, что у вас объявлена глобальная минна, а функция multi также объявляет локальную минну, которая скрывает глобальную минну
Ответ №2:
Вы скрываете глобальную minne
с помощью локальной int minne
— избавьтесь от int
и просто напишите minne = minne 1
, или даже просто minne
. Кроме того, вам не нужно ничего возвращать из функции, поскольку вы не используете результат.
Комментарии:
1. Похоже, что она вообще ничего не должна возвращать.
2. @Adrian: Она возвращается
minne
.
Ответ №3:
- Из функции можно вернуть только одну переменную.
- Переменная
minne
вmain()
равна 0, потому что ее область видимости глобальная и она была автоматически инициализирована значением 0. функцияminne
inmulti()
является локальной и «создается» при каждом вызове этой функции (уничтожается при выходе из функции).
Что вы хотите сделать, это:
//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;
}
Ответ №4:
Вы переопределяете ее.
Вместо
int minne = minne 1;
Делать
minne = minne 1;
Создание локальной переменной с тем же именем, что и глобальная, затеняет глобальную.
Кроме того, в чем смысл вашего оператора return? Что вы пытаетесь сделать, делая return x, minne;
? И вы даже не проверяете возвращаемое значение вообще…
Комментарии:
1. x возвращает сумму a и b, умноженную друг на друга.
2. @AdrianLarsson ваша функция не возвращает,
x
она возвращаетminne
. Я уверен, что это не то, что вы имели в виду. Вы используете оператор,
не так, как следовало бы.3. Как получилось, что тогда это действительно дало мне ответ на математическую задачу?
4. Потому что
x
это глобальная переменная, и вы отбрасываете возвращаемое функцией значение. Вот почему вам сказали, что функция вообще ничего не должна возвращать. Что я пытаюсь понять, так это то, что, по вашему мнению , делает операторreturn x,minne
.5. @Adrian: Поскольку вы не используете результат функции, вы используете глобальную
x
, которая действительно содержит правильный результат.
Ответ №5:
Потому что то, что находится внутри multi, не является тем, что находится за его пределами. Вы повторно объявили ее как переменную, локальную для multi, это та, которая увеличивается, а затем теряется при возврате
Комментарии:
1. На самом деле в этом нет необходимости —
minne
он пытается увеличить значение является глобальным.2. Я знаю, что вы это знаете, они это знают. Однако компилятор сделал так, как было сказано….