#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 все по-другому, он берет случайные величины из памяти. Поэтому в качестве хорошей практики всегда инициализируйте свою переменную