• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ampat991

Dúvida em C

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui criar o 'filtro' de numeros reias  :)

Obrigado pela ajuda :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora