Возникли проблемы с этой простой программой

0

Вопрос

Программа просто должна рассчитать возраст пользователей, вычитая их dob из текущего года. Когда я запускаю программу, она успешно компилируется, но я получаю длинное число, например -215863352. Условия if и else добавлены только для того, чтобы проверить их, я писал различные программы, используя их, чтобы убедиться, что я понимаю синтаксис в c. Я понимаю, что упускаю что-то простое, но не могу этого понять.

#include <stdio.h>
int main()
{
    int year;
    int cyear;
    int age = cyear - year;

    printf("Please enter the year you were born: \n");
    scanf("%i", &year);
    printf("Now enter the current year: \n");
    scanf("%i", &cyear);

    if (1+1 == 2){
        printf("You must be %i", age);
    }
    else {
        printf("Cannot compute age, GOODBYE:\n");
    }
    return 0;
}
2
0

Вы рассчитываете возраст до того, как пользователь введет данные. Так что age переменная хранит значение мусора.

Решение:

Расположите расчет возраста после ввода данных от пользователя, то есть после ввода cyear используя scanf. Правильный код приведен ниже #включить <stdio.h>

int main()
{
    int year;
    int cyear;
    int age =0;     //initialise with 0

    printf("Please enter the year you were born: \n");
    scanf("%i", &year);
    printf("Now enter the current year: \n");
    scanf("%i", &cyear);
    
    age = cyear - year;     //note the change here

    if (1+1 == 2){
        printf("You must be %i", age);
    }
    else {
        printf("Cannot compute age, GOODBYE:\n");
    }
    return 0;
}
2021-11-23 08:07:23
-2
enter code here
   #include <stdio.h>
   int main()
   {
  long long int year;
  printf("Please enter the year you were born: \n");
scanf("%lld",&year);
long long int cyear;
  printf("Now enter the current year: \n");
scanf("%lld",&cyear);

long long  int age = cyear-year;

if (1){
    printf("You must be %lld", age);
}
else {  printf("Now enter the current year: \n");
scanf("%lld",&cyear);

    printf("Cannot compute age, GOODBYE:\n");
}
return 0;

}

2021-11-23 08:23:51

похоже, что проблема возникла из-за инициализации.
ali balhtiari

Привет, добро пожаловать в SO! Пожалуйста, включите объяснение вашего ответа, а не только код. :)
Docteur

Если у вас есть расчет (например, возраст=cyear_year) перед инициализацией, это приведет к неправильному ответу, потому что вы не знаете текущего монтирования вашей переменной .и она получает некоторое значение из памяти.
ali balhtiari

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................