Ir ao conteúdo
  • Cadastre-se
Oberdan

RESOLVIDO Passagem de parâmetro usando struct

Recommended Posts

Bom dia pessoal, estou com problema na passagem de parâmetro usando um vetor struct, na hora de referenciar essa passagem e que esta dando erro, estou fazendo um exemplo da tabela do brasileirão, estou começando e me deparei com esse problema, desde de já agradeço! vou colocar em baixo o código, e vou inserir em anexo também.

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
 
void menuPrincipal();
void cadastroTimes(struct time TIMES);
void ordenarNomes(time TIMES);
//void exibirTabela();
 
struct time{
char nome[50];
char cid[50];
int pontos,s_gols,vitorias,classif,jogos;
int empates,derrotas;
};
 
int main(){
setlocale(LC_ALL, "Portuguese");
system("color F0");
menuPrincipal();
}
void menuPrincipal(){
 
struct time TIMES[2];
int opcao;
do{
 
printf("\n\t\t******************************************");
printf("\n\t\t*         CAMPENOATO BRASILERIO          *");
printf("\n\t\t******************************************");
printf("\n\t\t*                  MENU                  *");
printf("\n\t\t*----------------------------------------*");
printf("\n\t\t* [1] - Cadastrar times                  *");
printf("\n\t\t* [2] - Imprimir                         *");//alterar pontos dos times, saldo de gols
printf("\n\t\t* [3] - Exibir Tabela                    *");
printf("\n\t\t* [4] - Resultados                       *");
printf("\n\t\t* [5] - Sair                             *");
printf("\n\t\t******************************************\n\t");
printf("\nDigite sua OPÇÃO:");
scanf("%d", &opcao);
 
     switch (opcao){
          case 1:
              system("cls");
               cadastroTimes(struct time TIMES);
               break;
        case 2:
         int i;
      printf("\n**GRAVADO NO VETOR**\n");
for(i=0;i<2;i++){
 
printf("\nTime: %s", TIMES.nome);
printf("\nCidade do Time: %s", TIMES.cid);
printf("\n Saldo de gols; %d", TIMES.s_gols);
printf("\n Jogos; %d", TIMES.jogos);
printf("\n Vitorias; %d", TIMES.vitorias);
 
}         
             break;
        case 3:
//              exibirTabela();
              break;
        case 4:
            
            break;
        case 5:
              break;
    }
    }while(opcao != 5);
}
void cadastroTimes(struct time TIMES ){
 
struct time TIMES[2];
int i;
 
for(i=0;i<2;i++){
printf("\n Cadastrando Times!!!\n");
fflush(stdin);
printf("\nTime %d:", i+1);
gets(TIMES.nome);
printf("Cidade do Time:%d:", i+1);
gets(TIMES.cid);
printf("\n");
TIMES.s_gols=0;
TIMES.jogos=0;
TIMES.vitorias=0;
}
printf("\n**GRAVADO NO VETOR**\n");
for(i=0;i<2;i++){
 
printf("\nTime: %s", TIMES.nome);
printf("\nCidade do Time: %s", TIMES.cid);
printf("\n Saldo de gols; %d", TIMES.s_gols);
printf("\n Jogos; %d", TIMES.jogos);
printf("\n Vitorias; %d", TIMES.vitorias);
 
}
}
 
/*
    FILE *fp;
 
    fp = fopen("times.txt","wb");
 
    printf("\n\t Nome de Time: ");
    scanf("%s", &cad.nome);
   
    printf("\n\t Cidade do Time: ");
    scanf("%s", &cad.cid);
 
    fwrite (&cad, sizeof(cad),1,fp);
    fclose(fp);
    printf("Cadastro efetuado com sucesso!\t\n");
    system("pause");
system("cls");
    menuPrincipal();
}*/
 
/*void exibirTabela(){
FILE *fp;
 
fp = fopen("times.txt", "r");
 
if (fp == NULL){
printf("\n\t0000203#94903&3549s1 Error...\n\n");
exit(EXIT_FAILURE);
}
while(!feof(fp)){
printf("%c");
}
printf("\n\n\ ");
system("pause");
}
*/
 
void ordenarNomes(time TIMES){
char temp[30];
printf("=================================\n");
    printf("Ordenando por nome");       
    struct time TIMES[2];          
    //ordena
     for(i = 1; i < soma; i++){
         for (j = 0; j < soma-1; j++){
                       
              if(strcmp(TIMES[j].nome,TIMES[j+1].nome) > 0){
                strcpy(temp,TIMES[j].nome);
                 strcpy(TIMES[j].nome,TIMES[j+1].nome);
                 strcpy(TIMES[j+1].nome,temp);}                               
           }      
         }
                      
     //imprime                   
      for(i=0;i<soma;i++){ 
      printf("\n");   
      printf("nome = %s\n",vet.nome);}}
                     
}
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

deve ser porque voce ta pegando como parametro só uma estrutura "time" ,tenta assim

void cadastroTimes(struct time *TIMES);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que nada, existe + arbitrariedades;

A mais notável é:

Você declarou protótipos de funções contendo parâmetro de struct antes da dito cujo:

Em C a ordem é muito importante, depois dos macros (#), vem os tipos globais;

No caso a struct time deve ser escrita antes dos protótipos de funções que à utilizar.

 

 

Ordem correta;

struct time{char nome[50];char cid[50];int pontos,s_gols,vitorias,classif,jogos;int empates,derrotas;}void menuPrincipal();void cadastroTimes(struct time TIMES);void ordenarNomes(time TIMES);//void exibirTabela();

A maneira de declarar as minhas variáveis segundo o padrão ANSI C é para struct:

struct time stTimeArr[ 15]; //Vetorstruct time stMeuTime; // Variávelstruct time * stTimePtr; //Ponteiro

Para protótipos

void cadastroTimes(struct time TIMES ); // TIMES é uma cópia.void cadastroTimes(struct time * TIMES );// TIMES é um ponteiro;void cadastroTimes(int nTimes, struct time TIMES[ nTimes]); // TIMES é um vetor 

Com essas dicas, talvez eu tenha te ajudado um pouco;

De qualquer forma valeu;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal da Membros Plenos muito obrigado pela dica, consegui resolver o problema. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×