Jump to content

[RESOLVIDO] pequena duvida 2


msmsms
 Share

Recommended Posts

eu fiz o codigo que deixo em baixo

o mesmo pede ao utilizador 2 valores ''idade'' e ''peso''

eu coloco como utilizador um numero para cada uma destas variaveis

dou à idade por exemplo 20 e ao peso por exemplo 70.2

acontece que quando o programa faz o ultimo printf ele coloca a idade correctamente mas o peso não o está a colocar correctamente, diz que é 0.00 e eu como utilizador não disse que o peso era 0.00 mas sim 70.2 e o programa deveria responder 70.20

mas não responde...

alguém me pode dizer o que se passa?

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

int main()
{
    int idade;
    float peso;

    printf("qual e a idade? \n");
    scanf("%d", &idade);
    printf("qual e o peso? \n");
    scanf("%.2f", &peso);

    printf("chamo-me jose, tenho %d anos e peso %.2f kg \n", idade, peso);
}
Link to comment
Share on other sites

Experimenta assim:

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

int main()
{
    int idade;
    double peso;

    printf("qual e a idade? \n");
    scanf("%d", &idade);
    printf("qual e o peso? \n");
    scanf("%lf", &peso);

    printf("chamo-me jose, tenho %d anos e peso %.2lf kg \n", idade, peso);

    return 0;
}

Link to comment
Share on other sites

Experimenta assim:

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

int main()
{
    int idade;
    double peso;

    printf("qual e a idade? \n");
    scanf("%d", &idade);
    printf("qual e o peso? \n");
    scanf("%lf", &peso);

    printf("chamo-me jose, tenho %d anos e peso %.2lf kg \n", idade, peso);

    return 0;
}

o resultado da tua resoluções foi ainda pior

pois dá ao peso -0.00 não respeitando na mesma o valor dado pelo utilizador

Link to comment
Share on other sites

No teu primeiro código o segundo scanf deve ser 'scanf("%2f", &peso);' (sem o ponto antes do dois). O ponto lá faz com que o scanf fique à espera de encontrar um ponto como primeiro caracter lido de stdin. Como não é sai logo, sem mexer na variável. Podes ler aqui a explicação detalhada: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

Link to comment
Share on other sites

No teu primeiro código o segundo scanf deve ser 'scanf("%2f", &peso);' (sem o ponto antes do dois). O ponto lá faz com que o scanf fique à espera de encontrar um ponto como primeiro caracter lido de stdin. Como não é sai logo, sem mexer na variável. Podes ler aqui a explicação detalhada: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

parece que tens alguma razão, fazendo a alteração que disses-te eu já consigo um valor para o peso no ultimo printf mas por exemplo se coloco como utilizador 70.90

o programa vai dizer que o peso é 70.00 porquê que isto acontece?

para onde foi o 00.90?

Link to comment
Share on other sites

No teu primeiro código o segundo scanf deve ser 'scanf("%2f", &peso);' (sem o ponto antes do dois). O ponto lá faz com que o scanf fique à espera de encontrar um ponto como primeiro caracter lido de stdin. Como não é sai logo, sem mexer na variável. Podes ler aqui a explicação detalhada: http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

parece que consegui resolver por completo retirando não só o ponto mas também o 2 ao segundo printf 😕

agora sim é colocado no ultimo printf a idade e o peso fornecidos pelo utilizador de forma correcta

obrigado

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

int main()
{
    int idade;
    float peso;

    printf("qual e a idade? \n");
    scanf("%d", &idade);
    printf("qual e o peso? \n");
    scanf("%f", &peso);

    printf("chamo-me jose, tenho %d anos e peso %.2f kg \n", idade, peso);
}
Link to comment
Share on other sites

Para completar o topico

chk = scanf("%2f", &var);

A instrucao acima faz serem lidos no maximo 2 caracteres (depois de ignorar espacos em branco), interpreta-los como um valor do tipo float e, se a interpretacao funcionar, mete-los na variavel var. No fim da instrucao a variavel chk vai ter 1 se foi possivel arranjar um valor para a variavel destino; vai ter 0 se nao foi possivel arranjar esse valor (por exemplo, o utilizador escreveu "dois", e vai ter EOF se houve um erro de leitura antes de se ter completado a verificacao).

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

O return 0 esta correcto...

Suponho que o problema do teu código era imprimir um double com "%2lf". Na versão de C publicada em 1989 (aquela que o Visual Studio compila) isso era um erro, na versão de C de 1999 o l passou a ser ignorado.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.