Ir ao conteúdo

C Algoritmo em C que leia a pena números inteiros pares e ímpares


Ir à solução Resolvido por Flávio Pedroza,

Posts recomendados

Postado
<>

Boa noite estou tentando refazer o programa que segue abaixo para que ele leia apenas números inteiros e diga se são pares ou ímpares, sem aceitar letras ou números fracionados e caso entre letras ou números fracionados ele peça para digitar um número novamente. Se puderem me ajudar agradeço. 

 

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int nr;
do
{
printf ("Digite um numero. 0 para encerrar : ");
scanf ("%d",&nr);
if (nr%2==0)
/*se nr for divisivel por 2(O resto da divisão por 2 for 0)*/
printf ("O numero eh par\n");
else
printf ("O numero eh impar\n");
system ("pause");
system ("cls");
}while (nr != 0); //enquanto nr for diferente de 0
return 0;
}
 

  • Solução
Postado

Para acusar erro no caso de letras, basta você checar o retorno da função scanf. Se for diferente de 1, é porque foi digitado algo diferente de um número:

if (scanf ("%d",&nr) != 1) 
{
    printf ("\nErro, apenas numeros");
} else 
{
 	(...)
};

Para prevenir números fracionários é mais complicado. Eu recomendo ler o número do tipo ponto flutuante e verificar se ele é igual a sua parte inteira, caso contrário o número tem parte fracionária.

float nraux; //vai precisar dessa variavel
if (scanf ("%f",&nraux) != 1) //você vai ler tipo float
{
    printf ("\nErro, apenas numeros");
} else 
{
   nr = nraux; // transformar de float para inteiro (ignorar parte decimal)
   if (nr != nraux) // o número inteiro é diferento do float, então existe parte decimal
   {
       printf ("\nErro, apenas numeros inteiros");
   } else 
   {
		//O número é ok!
		//O código para verificar se o número é par ou impar vai aqui
   }
}

 

  • Curtir 1
Postado

Outra maneira para eliminar números fracionários (além de eliminar letras) seria checar o que é o primeiro caractere seguinte ao número:

if(scanf("%d%c", &nr, &ch) != 2 || ch != '\n') {
    printf("Erro, apenas numeros inteiros.\n");
}


// Ou então:

if(scanf("%d%c", &nr, &ch) != 2 || ch == '.' || ch == ',') {
    printf("Erro, apenas numeros inteiros.\n");
}

 

  • 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!