Jump to content

Duvida ao receber valores


einstein
 Share

Recommended Posts

Estou a fazer um programa no qual pretendo calcular um numero levantado a outro numero. A base pode ser um numero real e o espoente tem que ser inteiro positivo.

Para ler os numeros do teclado estou a fazer:

fegts(buff,1024,stdin);
               n=sscanf(buff, "%f %d",base, expoente);

para verificar se a base e mesmo um numero real basta verificar se n !=0 agora para verificar se o expoente e um inteiro positivo nao estou a conseguir fazer, pensei em utilzar tambem o n mas se colocar um float ele retorna 2 apesar de nao ser um inteiro.

Link to comment
Share on other sites

O valor da expressao

sscanf(buff, "%f %d",base, expoente)

pode ser um de quatro:

a) 2 base tem um valor de virgula flutuante convertido para float e expoente tem um inteiro, eg com "3.14159 42"

b) 1 base tem um valor de virgula flutuante convertido para float e expoente "nao tem valor", eg com "3.14159 einstein"

c) 0 nem base nem expoente "tem valor", eg com "forty two"

d) EOF nem base nem expoente "tem valor", eg com "" (a string vazia)

Para uma melhor gestao de erros, em vez de sscanf(), experimenta strtol() e strtod().

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 valor da expressao

sscanf(buff, "%f %d",base, expoente)

pode ser um de quatro:

a) 2 base tem um valor de virgula flutuante convertido para float e expoente tem um inteiro, eg com "3.14159 42"

b) 1 base tem um valor de virgula flutuante convertido para float e expoente "nao tem valor", eg com "3.14159 einstein"

c) 0 nem base nem expoente "tem valor", eg com "forty two"

d) EOF nem base nem expoente "tem valor", eg com "" (a string vazia)

Para uma melhor gestao de erros, em vez de sscanf(), experimenta strtol() e strtod().

Com essas duas funções segundo o que li nao posso verificar apenas posso converter as strings. Eu nao quero converter as strings apenas quero verificar se esta correcto se nao estiver peço outro valor ao utilizador.

Link to comment
Share on other sites

Ao usar sscanf(buff, "%f %d", &base, &exponente) com o valor de "3.14159 2.71828" o que vai acontecer é que base passa a ter o valor 3.14159 e exponente o valor 2, ficando a string ".71828" por tratar e o valor da expressao é 2 (nota que fizeste a conversao, nao foi apenas teste).

USando strtod() e strtol() podes averiguar, depois do strtol() executar, o que ficou no buffer (o ".71828") e tomar uma decisao com base nisso (com o scanf() nao consegues aceder ao resto do buffer).

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

Ao usar sscanf(buff, "%f %d", &base, &exponente) com o valor de "3.14159 2.71828" o que vai acontecer é que base passa a ter o valor 3.14159 e exponente o valor 2, ficando a string ".71828" por tratar e o valor da expressao é 2 (nota que fizeste a conversao, nao foi apenas teste).

USando strtod() e strtol() podes averiguar, depois do strtol() executar, o que ficou no buffer (o ".71828") e tomar uma decisao com base nisso (com o scanf() nao consegues aceder ao resto do buffer).

Ah. Já percebi

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.