Ir ao conteúdo

Posts recomendados

Postado

Devo fazer um programa que imprima na tela a sequência de 1 ao número digitado. Se o usuário digitar o número zero, número negativo ou número decimal. deve-se aparecer uma mensagem de erro e uma nova oportunidade de digitação de um número inteiro positivo.

Erro: não estou conseguindo imprimir a mensagem de erro para um número decimal digitado.

 

#include <stdio.h>

main(){

    int a, i;
    float b;
    printf("Digite um numero: ");
    scanf("%d", &a);


    if (a < 0){
        printf("Erro! voce digitou um numero negativo.\n");
        printf("Nova chance. Digite um numero: ");
        scanf("%d", &a);
        for(i = 1; i <= a; i++)
        printf("\n%d\n", i);
    }


    if (a == 0){
     printf("Erro! voce digitou o numero zero.\n");
        printf("Nova chance. Digite um numero: ");
        scanf("%d", &a);
        for(i = 1; i <= a; i++)
        printf("\n%d\n", i);
    }
                         
      //Aqui deve vir a parte do erro de n° decimal


    if (a > 0){
        for(i = 1; i <= a; i++)
        printf("%d\n", i);
    }
    

    return 0;
}

 

  • Curtir 1
Postado

public void verificaNumero

(string valor) { if (Int32.TryParse(valor, out valor))

// se cair aqui o numero é inteiro

else if (Decimal.TryParse(valor, out valor))

// se cair aqui o numero é decimal }

  • Obrigado 1
  • Confuso 1
Postado

@pedro.maciel Qual caractere nos dados que não represente um elemento do conjunto dos números naturais* logo qualquer número cujo valor é menor ou igual 0, ou tem parte (fração) define uma leitura invalida. Então repense sua programação com dados 'double' (ou 'float') invés de 'int' essa é a abodegam sintética, usual e seu código está no caminho certo. 

  • Curtir 1
Postado

Use um laço do-while para ficar pedindo o número para o usuário, enquanto o mesmo não for válido. Aproveite e coloque a lógica de validação dentro de uma função, assim deixa o código mais organizado.

2 horas atrás, gbrdoidao disse:

public void verificaNumero

(string valor) { if (Int32.TryParse(valor, out valor))

// se cair aqui o numero é inteiro

else if (Decimal.TryParse(valor, out valor))

// se cair aqui o numero é decimal }

Acho que esse código é do C#, o autor está usando C.

  • Curtir 1
  • Obrigado 1
Postado
3 horas atrás, mauro_b disse:

@pedro.maciel Qual caractere nos dados que não represente um elemento do conjunto dos números naturais* logo qualquer número cujo valor é menor ou igual 0, ou tem parte (fração) define uma leitura invalida. Então repense sua programação com dados 'double' (ou 'float') invés de 'int' essa é a abodegam sintética, usual e seu código está no caminho certo. 

 

A ideia é por ai mesmo, trate tudo como double e para saber se é inteiro você usa a funcao modf.

 

O programa todo seriam um loop pra pessoa fazer a entrada dos dados até apertar esc ou algo assim (ou uma pergunta se quer continuar com uma flag pra sair do loop), um outro loop pra fazer o print dos digitos e alguns ifs fazer o que você quer (menor q 0, igual a 0 e maior q 0) , dentro do if maior q zero você coloca o modf pra pegar a parte inteira e a quebrada e faz outro if, se a parte quebrada por 0 é porque é inteiro, senao você dá erro.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!