Ir ao conteúdo
  • Cadastre-se

Erro na compilação do código


Douglas O. Otto

Posts recomendados

Boa tarde pessoal. poderiam me ajudar sobre meu problema.

Está dando estes 2 erros no meu código, podem me ajudar explicando o porque!?

 

[Error] cannot convert 'info {aka computadores}' to 'info* {aka computadores*}' for argument '1' to 'void pesquisar(info*)'

[Error] cannot convert 'info {aka computadores}' to 'info* {aka computadores*}' for argument '1' to 'info* remover(info*)'

 

 

#include<stdio.h>   
#include<stdlib.h>
#include<string.h>
#include<conio.h>

typedef struct computadores{//Criacao da struct
     char nome[15];
    int sala,ano;
    struct computadores *antes, *depois;
} info;

info *inserir(info*inicial){//inserir

    info *novo=NULL, *i=inicial;
    int s, a;
    char no[15];

    printf("     **Novo Computador!**\n");
    printf("\n\n");
    printf("Nome: ");
    gets(no);
    printf("Sala: ");
    scanf("%d",&s);
    printf("Ano: ");
    scanf("%d",&a);
    
    if(i==NULL){/*testa se a lista esta vazia*/

         i = (info *) malloc(sizeof(info));
     
         if(i==NULL)
             printf("Nao foi possivel realizar a operacao !\n\n");
         else{
                 strcpy(i->nome,no);
              i->sala = s;
              i->ano = a;
              i->depois = NULL;
              i->antes=NULL;
              return(i);
        }
    }else{
         novo=(info*)malloc(sizeof(info));
         
         if(novo==NULL)
         
             printf("Nao foi possivel realizar a operacao !\n\n");
             
         else{
             strcpy(novo->nome,no);
             novo->sala = s;
             novo->ano = a;
             novo->depois=i;
             novo->antes=NULL;
             i->antes=novo;
             return(novo);
         }
    }
}

void listar(info *inicial){
    
    info *i=inicial;
    
    if(i==NULL)
        printf("**Lista Vazia !**\n\n");
    else{
         printf("  **IMPRESSAO DA LISTA**\n");
         
         while(i!=NULL){
              printf("Nome:%s\n",i->nome);
              printf("Sala:%d\n",i->sala);
              printf("Ano:%d\n\n",i->ano);
              i=i->depois;/*p passa a apontar para o proximo elemento*/
         }
    }
}

void pesquisar(info *inicial){
    
    char no[15];
    info *i=inicial;
    
    if(i==NULL)
        printf("**Lista Vazia !**\n\n");
    else{
         printf("Pesquise por nome:\n");
         scanf("%s",&no);
         fflush(stdin);
         
         while((i!=NULL)&&strcpy(i->nome,no)!=0){
         
             i=i->depois;
             
             if(i==NULL)/*verifica se nao encontrou o codigo na lista */
                 printf("**Computador nao cadastrado !**\n\n");
             else{
                 printf("Computador encontrado");
             }
        }
    }
}

info *remover(info *inicial){
    
    info *aux=NULL;
    info *i=inicial;
    char no[15];
    
    if(i==NULL)
        printf("**Lista Vazia !**\n\n");
    else{
         printf("Computador que deseja remover:\n");
         scanf("%s",&no);
         
         while((i!=NULL)&&strcpy(i->nome,no)!=0){
 
              aux=i;/*anterior sempre aponta para o anterior elemento da lista */
              i=i->depois;/*p aponta para o proximo elemento da lista*/
         }
         if(i==NULL)
             printf("**Computador nao encontrado !**\n\n");
         else{
            printf("**Posicao Removida !**\n\n");
            
         if(aux==NULL){/*verifica se e o 1ºelemento da lista que sera eliminado*/
     
              if(i->depois==NULL)
                  inicial=NULL;
              else{                            
                  inicial=i->depois;
                  inicial->antes=NULL;
              }
          }else{
             aux->depois=i->depois;
             
             if(aux->depois!=NULL)
                   aux->depois->antes=aux;
         }
     
         free(i);
     }
}
return(inicial);
}


int main(){

    info *inicial=NULL;
    char op;
    
    do{        
        printf("*******************************************************\n");
        printf("*                                                     *\n");
        printf("*             Universidade Luterana do Brasil         *\n");
        printf("*                         ULBRA                       *\n");
        printf("*                                                     *\n");
        printf("*                      ---Menu---                     *\n");
        printf("*                                                     *\n");
        printf("*    1 - Insira um computador                         *\n");
        printf("*    2 - Liste todos os computadores                  *\n");
        printf("*    3 - Pesquise um computador                       *\n");
        printf("*    4 - Remova um computador                         *\n");
        printf("*    5 - Sair                                         *\n");
        printf("*                                                     *\n");
        printf("*******************************************************\n");
        scanf("%d",op);
        system("cls");
    
        switch(op){/*chamada das respectivas funcoes*/
               case 1:
                   inicial=inserir(inicial);
            break;
            
              case 2:
                info(inicial);
            break;
            
               case 3:
                   pesquisar(inicial);
            break;
            
               case 4:
                   inicial=remover(inicial);
            break;
            
               case 5:
                   printf("Sair");
            break;
            
               default :
                   printf("Opcao Invalida!\n\n");
                   printf("\a");
               break;
          }
      
        fflush(stdin);             
      }while(op != 5);
             
}

Link para o comentário
Compartilhar em outros sites

Cara boa tarde. O que ocorre ai, é que você passa um ponteiro (que é a maneira correta de se invocar um struct), porém, com um info que não está declarada. Tente declará-la la em cima como variável global e depois me fala aqui o que ocorreu. Tipo: typedef info varinfo; 

Ai la embaixo você pega varinfo, que contém a referência pra struct. Faça isso. Abss !

Link para o comentário
Compartilhar em outros sites

3 horas atrás, fabregasf_CEC disse:

Cara boa tarde. O que ocorre ai, é que você passa um ponteiro (que é a maneira correta de se invocar um struct), porém, com um info que não está declarada. Tente declará-la la em cima como variável global e depois me fala aqui o que ocorreu. Tipo: typedef info varinfo; 

Ai la embaixo você pega varinfo, que contém a referência pra struct. Faça isso. Abss !

Desculpa amigo, mas não entendi o que tu quis dizer no final. Sou iniciante em programação, aí se pudesse ajudar na alteração ficaria grato.

adicionado 13 minutos depois

Amigo, fiz um código diferente aqui e funcionou.

 

Mas obrigado pelo retorno.

 

Corrigindo, não funcionou, depois que encerrei e abri a aplicação novamente, o mesmo parou de funcionar e não entendi o porque.

Se puder me ajudar no código acima agradeço.

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