Ir ao conteúdo

Posts recomendados

Postado


Olá, eu fiz esse programa e está aparecendo informação a mais quando apresento os números pares e impares.

Até aparecem os números pares e impares, o problema é que aparecem outros números também(Acredito que seja o endereço da memoria). Alguém poderia me ajudar ? Agradeço!!!

#include <stdio.h>

#include <conio.c>

#define MIN_NUM 1

#define MAX_NUM 20

//Struct

struct Vetor

{

int nro[MAX_NUM];

};

float leValidaFloat(char titulo[], char msgErro[], float valorMin, float valorMax);

char leValidaSN(char titulo[],char msgErro[],char opcao1, char opcao2);

void apresentaParImpar(int *par,int *impar,int cont);

void separaParImpar(struct Vetor *numeros,int cont);

int main(void)

{

// Declaracoes

struct Vetor numeros;

char desejaContinuar;

int cont=0;

// Instrucoes

do

{

numeros.nro[cont]=leValidaFloat("Informe o numero","Invalido, informe novamente",0,9999);

cont++;

desejaContinuar=leValidaSN("Deseja adicionar outras notas?[S/N]","Invalido informe novamente[S-Sim/N-Nao]",'S','N');

}while(desejaContinuar=='S' && cont<=20);

separaParImpar(&numeros,cont);

getch();

return 0;

}

//Objetivo: ler e validar float

//Parâmetros: titulo, msgErro, valorMin, valorMax

//Retorno: float validado

void apresentaParImpar(int *par,int *impar,int cont)

{

int contador;

// printf("NUMEROS %d\n",numeros->nro[contador]);

printf("PAR %d\n",*par);

printf("IMPAR %d\n",*impar);

}

//Objetivo: ler e validar float

//Parâmetros: titulo, msgErro, valorMin, valorMax

//Retorno: float validado

void separaParImpar(struct Vetor *numeros,int cont)

{

int contador;

int par[20],impar[20];

for(contador=0;contador<=cont-1;contador++)

{

if(numeros->nro[contador]%2==0)

{

par[contador]=numeros->nro[contador];

}

if(numeros->nro[contador]%2!=0)

{

impar[contador]=numeros->nro[contador];

}

apresentaParImpar(&par[contador],&impar[contador],cont);

}

}

//Funcao

//Objetivo: Ler e validar uma string

//Parametros: ref a titulo,ref a msg de erro,valor minimo e maximo do numero.

//Retorno: string validada

char leValidaSN(char titulo[],char msgErro[],char opcao1, char opcao2)

{

char opcao;

do

{

printf("%s\n",titulo);

opcao=getch();

opcao=toupper(opcao);

if(opcao!=opcao1 && opcao!=opcao2)

{

printf("%s\n",msgErro);

}

}while(opcao!=opcao1 && opcao!=opcao2);

return opcao;

}

//Objetivo: ler e validar float

//Parâmetros: titulo, msgErro, valorMin, valorMax

//Retorno: float validado

float leValidaFloat(char titulo[], char msgErro[], float valorMin, float valorMax)

{

float real;

int ret;

do{

printf("%s",titulo);

fflush(stdin);

ret = scanf("%f",ℜ);

fflush(stdin);

if(real<valorMin || real>valorMax || ret ==0){

system("cls");

printf("%s\n",msgErro);

}

}while(real<valorMin || real>valorMax || ret ==0);

return real;

}

Postado

Especialmente quando li seu código (postado) fez lembrar do Visual Basic TM assumi

que o erro estivesse na função que imprime. Onde está o corpo da função?

apresentaParImpar(&par[contador],&impar[contador],cont); 

Você esta passando simultaneamente, o último ponteiro de cada vetor com valor

, e quantidade de elementos mesclados de ambos, é somente um palpite, mais é

estranho se daí não vir o erro. Eu assumindo, faço assim;

  1. passar ponteiro do vetor (ambos)
  2. o número de pares e impares individualmente (variável contadora para cada)
  3. Finalmente assim: apresentaParImpar(&par[0], &impar[0], pc, ic);

 

 

{'!'}

Visitante
Este tópico está impedido de receber novas respostas.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!