Jump to content
Sign in to follow this  
ampat991

Dúvida em C

Recommended Posts

ampat991

Olá

Eu estava a tentar fazer uma calculadora em C, pedindo na linha de comando dois numeros reais (double's) e a operação a efectuar entre eles.

A minha dúvida é a seguinte: como posso verificar se um dado argumento inserido é ou não um número real.

Obrigado,

ampat991

Share this post


Link to post
Share on other sites
Baderous

Verificando o valor devolvido pelo scanf aquando da leitura. Se ao leres 1 real, o scanf devolver o valor 1, quer dizer que leu e armazenou com sucesso numa variável (float ou double) o valor que introduziste. Se der outro valor que não 1 (neste caso seria 0), então é porque introduziste algo que não é um real.

#include <stdio.h>

int main(void) {
    double p;
    int r;
    do {
        r = scanf("%lf",&p);
        scanf("%*c");
    } while (r<1);
    printf("%f\n",p);
    return 0;
}

Share this post


Link to post
Share on other sites
ampat991

Eu quero verificar isso para uma string que eu tinha inserido no terminal (porque os valores que inserimos no terminal ficam armazenados como strings).

Utilizando o sscanf para isso, ele rejeita strings como "palavra" ou "p8987", mas deixa passar com o valor 1 strings como "98tyy" e diz que leu o valor 98 para este caso.

Share this post


Link to post
Share on other sites
sportingdan

vou responder neste tópico só para que users com a mesma dúvida tenham acesso à informação, visto que já esclareci o ampat991 pessoalmente :D

Como verificar se um argumento introduzido na linha de comandos é um número real e convertê-lo em caso afirmativo?

Tendo em conta que os valores vão ser recebidos através dos argv[], logo sob o formato de strings, tem de se verificar se os mesmos strings são algarismos, ou seja, verificar se os strings inseridos contêm apenas algarismos, pontos (para permitir números decimais), traços (para números ou expoentes de notação científica negativos) e a letra 'e' (que representa o (10^) para números em notação científica).

Como sabem, uma string é um conjunto de char's, e a cada char corresponde um determinado código ASCII decimal.

Assim, basta verificarem se a string argv[] contém apenas os valores permitidos em ASCII (devem resolver este problema com um ciclo que comece a testar o primeiro caracter da string e acabe no último).

Deste modo, devem permitir que possa haver apenas:

- algarismos;

- um e um só '.' na string, que não pode ser nem o 1.º nem o último caracter da string; (decimais)

- um '-' no início da string e outro '-' a seguir ao 'e'; (negativos e expoentes de notação científica negativos)

- um e só um 'e', que não pode ser nem o 1.º nem o último caracter da string; (notação científica)

Um exemplo para o valor mais "complexo" que devem poder inserir na calculadora é:

-2.65e-10

Depois de todos estes testes, estão em condições para proceder à conversão da string para double através da função atof ou strtod.

Cumps.

Share this post


Link to post
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
Sign in to follow this  

×
×
  • 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.