Пытаюсь вычислить возраст на C

#c

#c

Вопрос:

Можете ли вы сказать мне, что не так с моим кодом?

 #include <stdlib.h>
#include <stdio.h>

int main()

{

    int CurrentYear;
    int BornYear;
    int age = CurrentYear - BornYear;

    printf("What year is it?n");
    scanf("%d", amp;CurrentYear);
    //printf("Year check: %dn", CurrentYear);
    printf("What year you were born?n");
    scanf("%d", amp;BornYear);
    //printf("Year check: %dn", BornYear);
    printf("You are %d years oldn", age);
    return 0;
}
  

В результате я получаю несколько странных чисел.

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

1. Запустите код в отладчике и посмотрите, что получится. C — процедурный язык, который означает, что все происходит по порядку. Подумайте, что и в каком порядке делается в вашем коде. А затем предупреждения для max, чтобы получить полезные подсказки о проблемах.

2. Переместите строку вычисление age после того, как вы задали текущий год и год рождения

3. Краткое примечание: вычислите переменную age после получения значений.

Ответ №1:

Выражения в C не являются формулами. Это:

 int age = CurrentYear - BornYear;
  

Не означает, что значение age будет всегда равно CurrentYear - BornYear . Это означает, что в этот момент в коде, age установлено значение CurrentYear - BornYear на основе текущего значения этих переменных. Обе эти переменные неинициализированы, поэтому их значения не определены.

Вам нужно переместить вычисление из age в после того, как вы прочитали в CurrentYear и BornYear :

 int CurrentYear;
int BornYear;
int age;

printf("What year is it?n");
scanf("%d", amp;CurrentYear);
printf("What year you were born?n");
scanf("%d", amp;BornYear);

age = CurrentYear - BornYear;
printf("You are %d years oldn", age);
  

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

1. Это очень хорошее объяснение. 1

2. Благодарю за помощь. Теперь совершенно ясно, что пошло не так!

Ответ №2:

Привет Madnevil и добро пожаловать в StackOverflow;

Вы получаете неверный результат, потому что порядок инструкций вашей программы неверен, вы вычисляете возраст перед чтением CurrentYear и BornYear :

Правильный способ сделать это:

 #include <stdlib.h>
#include <stdio.h>

int main()

{

    int CurrentYear = 0;
    int BornYear = 0;


    printf("What year is it?n");
    scanf("%d", amp;CurrentYear);
    //printf("Year check: %dn", CurrentYear);
    printf("What year you were born?n");
    scanf("%d", amp;BornYear);
    //printf("Year check: %dn", BornYear);

    int age = CurrentYear - BornYear;

    printf("You are %d years oldn", age);
        return 0; 
}
  

также вы можете спросить, почему результат не равен 0, потому что вы еще не инициализировали переменные?

ответ заключается в том, что на языке программирования C все по-другому, он берет случайные величины из памяти. Поэтому в качестве хорошей практики всегда инициализируйте свою переменную