Tendo problemas com esse simples programa

0

Pergunta

O programa é simplesmente suposto para calcular os usuários de idade subtraindo-se a sua data de nascimento a partir do ano corrente. Quando eu executo o programa é compilado com êxito, mas eu recebo um número longo como -215863352. O if e else condições são adicionados apenas para testá-los, eu estava escrevendo vários programas de usá-los para se certificar de que eu entender a sintaxe em c. Eu acho que eu estou faltando alguma coisa simples, mas não pode descobrir.

#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

Você está calculando a idade antes de a entrada é tomada a partir do usuário. De modo que o age variável armazena um valor de lixo.

Solução:

Posicione o cálculo de idade, depois de tomar a entrada do usuário que é depois de tomar de entrada de cyear usando scanf. O código correto é dada abaixo #include <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

parece que o problema surgiu por causa de inicialização.
ali balhtiari

Oi, bem-vindo para ASSIM! Por favor, inclua uma explicação da sua resposta, e não apenas um código. :)
Docteur

Se tem um cálculo (por exemplo, idade=cyear_year) antes da inicialização, ele vai levar para resposta errada, porque você não sabe a presente montagem de sua variável .e chega um valor de memória.
ali balhtiari

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................