Ir ao conteúdo
  • Cadastre-se

Erro no sprintf


LGON7
Ir à solução Resolvido por ScreenBlack,

Posts recomendados


Olá, neste programa o único erro é que não está aparecendo todas as classificações do vetor(ASIA,EUROPA...), acredito(tenho quase certeza) que seja no sprintf.


Alguém poderia me ajudar?


Obrigado;


 Síntese do programa para ajudar:


algoritmo pesquisaViagens;
// Síntese
//  Objetivo: Auxiliar em uma pesquisa sobre viagens
//  Entrada : Sexo, idade, local da viagem
//  Saída   :Em uma tabela o sexo, idade e local da última viagem por extenso das pessoas 
que possuem idade menor que a média,quantidade de pessoas que visitou cada um destes continentes e a quantidade que não saiu do brasil
 
// Valores de Entrada: M, 10, A
//                     M, 5 , S
//                     F, 5,  A
 
// Valores de Saida:
           SEXO     IDADE     LOCAL
              M         5     ASIA
              F         5     AMERICA DO NORTE
Quantidade de pessoas que visitaram a Asia:1
Quantidade de pessoas que visitaram a Europa:0
Quantidade de pessoas que visitaram a America Do Norte:2
Quantidade de pessoas que Nunca sairam do Brasil:0




#include <stdio.h>
#include <conio.c>
void obtemLocalIdadeMenorMedia(int idades[],char localIdadeMenorMedia[],char localViagem[], float mediaIdades, int qtdePessoas);
int leValidaInteiro(char titulo[], char msgErro[], int valorMin, int valorMax);
char leValidaCaracter(char titulo[], char msgErro[], char opcao1, char opcao2);
char leValidaLocalViagem(char titulo[], char msgErro[]);
void visaoFinal(int somaViagensEuropa,int somaViagensAsia,int somaViagensAmericaDoNorte,int somaNuncaSaiuPais);
int main(void)
{
// Declaracoes
    int idades[500],contador,somaIdades,qtdePessoas, idadeMenorMedia[500],contador2,contador3,somaViagensEuropa,somaViagensAsia,somaViagensAmericaDoNorte,somaNuncaSaiuPais;
char sexo[500], localViagem[500],desejaContinuar, sexoIdadeMenorMedia[500];
char localIdadeMenorMedia[100];
float mediaIdades;
// Instrucoes
    contador=0;
somaIdades=0;
qtdePessoas=0;
mediaIdades=0;
somaViagensEuropa=0;
somaViagensAsia=0;
somaViagensAmericaDoNorte=0;
somaNuncaSaiuPais=0;
do
{
idades[contador]=leValidaInteiro("Informe a idade:","Idade invalida, informe uma idade entre 2 e 150",2,150);
somaIdades=somaIdades+idades[contador];
sexo[contador]=leValidaCaracter("Informe o sexo[M-MASCULINO/F-FEMININO]:","Sexo invalido",'M','F');
localViagem[contador]=leValidaLocalViagem("Informe o local da viagem de acordo com o menu de opções:","Local invalido, informe novamente");
if(localViagem[contador]=='S')
{
somaViagensAsia=somaViagensAsia+1;
        }
else
{
if(localViagem[contador]=='E')
{
somaViagensEuropa=somaViagensEuropa+1;
            }
else
{
if(localViagem[contador]=='A')
{
somaViagensAmericaDoNorte=somaViagensAmericaDoNorte+1;
                }
else
{
 
somaNuncaSaiuPais=somaNuncaSaiuPais+1;
                }              
            }
        }       
printf("Digite qualquer tecla para continuar ou 'N' para mostrar o resultado:\n");
desejaContinuar=getch();
desejaContinuar=toupper(desejaContinuar);
clrscr();
contador=contador+1;
qtdePessoas=contador;
mediaIdades=somaIdades/qtdePessoas;
}while(desejaContinuar!='N' && contador<=2);
obtemLocalIdadeMenorMedia(idades,localIdadeMenorMedia,localViagem, mediaIdades, qtdePessoas);
printf("Tabela de pessoas que possuem idade menor que a media das idades:\n");
printf("IDADE     SEXO     LOCAL\n");
for(contador2=0; contador2<=contador-1;contador2++)
{
if(idades[contador2]<mediaIdades)
{
printf("%5d     %c         %s\n",idades[contador2],sexo[contador2],localIdadeMenorMedia);
        }
          
    }
visaoFinal(somaViagensEuropa,somaViagensAsia,somaViagensAmericaDoNorte,somaNuncaSaiuPais);
  getch();
  return 0;
}
//Objetivo: ler local viagem
//Parâmetros: idades, localIdadeMenorMedia, localViagem, mediaIdades, qtdePessoas
//Retorno:nenhum
void obtemLocalIdadeMenorMedia(int idades[],char localIdadeMenorMedia[],char localViagem[], float mediaIdades, int qtdePessoas)
{
int contador2;
for(contador2=0; contador2<=qtdePessoas-1;contador2++)
{
if(idades[contador2]<mediaIdades)
{
if(localViagem[contador2]=='S')
{
sprintf(localIdadeMenorMedia,"ASIA\n");
            }
else
{
if(localViagem[contador2]=='E')
{
sprintf(localIdadeMenorMedia,"EUROPA\n");
                }
else
{
if(localViagem[contador2]=='A')
{
sprintf(localIdadeMenorMedia,"AMERICA DO NORTE\n");
                    }
else
{
sprintf(localIdadeMenorMedia,"NUNCA SAIU DO PAIS\n");
}
   }
      }
       }
   }
}
//Objetivo: ler e validar inteiro
//Parâmetros:titulo msgErro, valorMin, valorMax
//Retorno: numero inteiro validado
    int leValidaInteiro(char titulo[], char msgErro[], int valorMin, int valorMax)
    {
int numero;
do
{
printf("%s\n",titulo);
scanf("%d",&numero);
if(numero<valorMin || numero>valorMax)
{
printf("%s\n",msgErro);
}
}while(numero<valorMin || numero>valorMax);
return numero;
    }
//Objetivo: ler e validar caracter
//Parâmetros: titulo, msgErro, opcao1, opcao2
//Retorno: caracter validado
    char leValidaCaracter(char titulo[], char msgErro[], char opcao1, char opcao2)
    {
char letra;
do
{
printf("%s\n",titulo);
letra=getch();
letra=toupper(letra);
if(letra!=opcao1 && letra!=opcao2)
{
printf("%s\n",msgErro);
}
}while(letra!=opcao1 && letra!=opcao2);
return letra;
    } 
//Objetivo:ler e validar local viagem
//Parâmetros: titulo, msgErro
//Retorno: local viagem validado
    char leValidaLocalViagem(char titulo[], char msgErro[])
    {
char letra;
do
{
printf("MENU DE VIAGEM\n");
printf("E - EUROPA\n");
printf("S - ASIA\n");
printf("A - AMERICA DO NORTE\n");
printf("N - NUNCA SAIU DO PAIS\n");
printf("%s\n",titulo);
letra=getch();
letra=toupper(letra);
if(letra!='E' && letra!='S' && letra!='A' && letra!='N')
{
printf("%s\n",msgErro);
}
}while(letra!='E' && letra!='S' && letra!='A' && letra!='N');
return letra;
    }
//Objetivo:Quantidade de pessoas que viajaram para os locais
//Parâmetros:somaViagensEuropa,somaViagensAsia,somaViagensAmericaDoNorte,somaNuncaSaiuPais
//Retorno:nenhum
void visaoFinal(int somaViagensEuropa,int somaViagensAsia,int somaViagensAmericaDoNorte,int somaNuncaSaiuPais)
{
printf("Quantidade de pessoas que visitaram a Asia:%d\n", somaViagensAsia);
printf("Quantidade de pessoas que visitaram a Europa:%d\n", somaViagensEuropa);
printf("Quantidade de pessoas que visitaram a America Do Norte:%d\n", somaViagensAmericaDoNorte);
printf("Quantidade de pessoas que Nunca sairam do Brasil :%d\n", somaNuncaSaiuPais);
}

Link para o comentário
Compartilhar em outros sites

Fiz o teste aqui e funcionou.

 

PS: precisei ajustar as chamadas de funções, pois os compiladores mais recentes não aceitam o tipo de nomenclatura que você está usando.

 

void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int qtdePessoas);int leValidaInteiro(const char titulo[100], const char msgErro[100], int valorMin, int valorMax);char leValidaCaracter(const char titulo[100], const char msgErro[100], char opcao1, char opcao2);char leValidaLocalViagem(const char titulo[100], const char msgErro[100]);
Link para o comentário
Compartilhar em outros sites

 

Fiz o teste aqui e funcionou.

 

PS: precisei ajustar as chamadas de funções, pois os compiladores mais recentes não aceitam o tipo de nomenclatura que você está usando.

void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int qtdePessoas);int leValidaInteiro(const char titulo[100], const char msgErro[100], int valorMin, int valorMax);char leValidaCaracter(const char titulo[100], const char msgErro[100], char opcao1, char opcao2);char leValidaLocalViagem(const char titulo[100], const char msgErro[100]);

@ScreenBlack Eu uso o DevC, preciso fazer nessa nomenclatura ai... Teria como me ajudar?

 

Obrigado pela atenção

Link para o comentário
Compartilhar em outros sites

  • Solução

Pode trocar as chamadas das funções para essas que passei acima.

 

Os dois únicos erro de lógica que encontrei, foram:

1) Na função "main()", passar a chamada da função "obtemLocalIdadeMenorMedia()" para dentro do "for" e trocar o parâmetro "qtdePessoas" para "contador2".

    printf("Tabela de pessoas que possuem idade menor que a media das idades:\n");    printf("SEXO     IDADE     LOCAL\n");    for ( contador2 = 0; contador2 <= qtdePessoas-1; contador2++ )        if ( idades[contador2] < mediaIdades )        {            obtemLocalIdadeMenorMedia(idades,localIdadeMenorMedia,localViagem, mediaIdades, contador2);            printf("%4c     %5d         %s\n", sexo[contador2], idades[contador2], localIdadeMenorMedia);        }

 

2) Na função "obtemLocalIdadeMenorMedia()", remover o tratamento para validar idades inferiores a média (pois ela já está inclusa no "for" do item 1) e remover o "for", pois a posição está sendo passada por parâmetro:

void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int posicaoCadastro){    if ( localViagem[posicaoCadastro] == 'S' )        sprintf(localIdadeMenorMedia, "ASIA");    else        if ( localViagem[posicaoCadastro] == 'E' )            sprintf(localIdadeMenorMedia, "EUROPA");        else            if ( localViagem[posicaoCadastro] == 'A' )                sprintf(localIdadeMenorMedia, "AMERICA DO NORTE");            else                sprintf(localIdadeMenorMedia, "NUNCA SAIU DO PAIS"); }
Link para o comentário
Compartilhar em outros sites

 

Pode trocar as chamadas das funções para essas que passei acima.

 

Os dois únicos erro de lógica que encontrei, foram:

1) Na função "main()", passar a chamada da função "obtemLocalIdadeMenorMedia()" para dentro do "for" e trocar o parâmetro "qtdePessoas" para "contador2".

    printf("Tabela de pessoas que possuem idade menor que a media das idades:\n");    printf("SEXO     IDADE     LOCAL\n");    for ( contador2 = 0; contador2 <= qtdePessoas-1; contador2++ )        if ( idades[contador2] < mediaIdades )        {            obtemLocalIdadeMenorMedia(idades,localIdadeMenorMedia,localViagem, mediaIdades, contador2);            printf("%4c     %5d         %s\n", sexo[contador2], idades[contador2], localIdadeMenorMedia);        }

2) Na função "obtemLocalIdadeMenorMedia()", remover o tratamento para validar idades inferiores a média (pois ela já está inclusa no "for" do item 1) e remover o "for", pois a posição está sendo passada por parâmetro:

void obtemLocalIdadeMenorMedia(int idades[500], char localIdadeMenorMedia[100], char localViagem[500], float mediaIdades, int posicaoCadastro){    if ( localViagem[posicaoCadastro] == 'S' )        sprintf(localIdadeMenorMedia, "ASIA");    else        if ( localViagem[posicaoCadastro] == 'E' )            sprintf(localIdadeMenorMedia, "EUROPA");        else            if ( localViagem[posicaoCadastro] == 'A' )                sprintf(localIdadeMenorMedia, "AMERICA DO NORTE");            else                sprintf(localIdadeMenorMedia, "NUNCA SAIU DO PAIS"); }

 

@ScreenBlack Não colocando os parâmetros que você me passou não da certo... é que não aprendi esse "const" e preciso fazer sem isso...Obrigado mais uma vez

@ScreenBlack AEEE valeu, consegui agora, obrigado :)

Link para o comentário
Compartilhar em outros sites

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!