Member 14833786 Ответов: 3

Почему в результате получается этот код с 4196044?


Привет. Я учусь кодировать функции на языке Си и специально тестировал тис:
Когда вы используете int test; в функции example (), которая изменяет значение test, а затем в вашем основном коде вы повторяете функцию example(). Значение теста изменяется или сохраняет одно и то же значение.

Поэтому я тестировал и написал этот код, но результат-4196044, и я не понимаю, почему это так. Мой код был просто предположен, чтобы добавить три балла, добавив тест. Итак, в первом цикле тест равен 3. Итак, я хотел посмотреть, будет ли во втором цикле тест все еще равен 3 или это будет 6, что означает, что переменная test сохраняет свое значение 3 из предыдущего цикла, а затем добавляет еще 3. надеюсь, что я имею смысл. спасибо за чтение.
Код такой ([С] test2 на.с - Pastebin.com[^])

Что я уже пробовал:

#include <cs50.h>
#include <stdio.h>
int addthree(int var);

int main(void)
{
    int result;
    int score = 9;
    for (int i = 0; i < 2;i++)
    {
    result = addthree(score);
    }
    printf("%i\n", result);
}

int addthree(int var)
{
    int test;
    for (int i=0; i < 3; i++)
    {
        test = test + i;
    }
    var = var + test;
    return var;
}

3 Ответов

Рейтинг:
2

Dave Kreskowiak

В следующий раз используйте отладчик. Вы можете проверить содержимое переменных из первой строки кода. Это было легко решить с помощью отладчика. Это сэкономило бы вам кучу времени.


Рейтинг:
16

John R. Shaw

Просто: каково значение переменной test?
Ответ: Все, что было в памяти стека в момент объявления.

int test; // value undefined.
for (int i=0; i < 3; i++)
{
    test = test + i; // value undefined - unknown
}


Локальные переменные по умолчанию не имеют значения 0 в языках C или C++. Они содержат все, что уже находилось в этом месте на момент объявления. Вы должны инициализировать их до значения know, прежде чем использовать их, или вы не можете предсказать ответ заранее.

Вы получаете один и тот же ответ каждый раз, когда запускаете программу?
Если да, то, если у вас есть время, попытайтесь выяснить, почему. Знание этого улучшит ваше понимание и позволит вам распознавать ошибки до того, как они произойдут, и исправлять их, когда вы обнаружите их в будущем.


Рейтинг:
0

steveb

Ваш int test; неинициализирован