Ir para conteúdo
Fórum Script Brasil
  • 0

função em "C"


erickstryck

Pergunta

Pessoal preciso de um empurrãozinho porque essa função não funciona estou lendo livros e mais livros mais ainda não consegui fazer funcionar!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 500
int sa,x,cod,li,sa2,co=0,ex,p;

typedef struct {
    char titulo[30],autor[30],editora[30];
    int ano,emprestado,codigo;    
}stante;

void sair (){
    printf("Digite 1 para sair ou 0 para voltar ao menu anterior!\n");
    scanf("%d",& sa);
    system("cls");
}




//aqui é a função
void cadastro (stante (*livro) [MAX])
{
                    for(x=1;x<=500;x++)
                    {
                    livro[x]->codigo = -1;
                    }
                    printf("Nesta opção você ira incluir os livors em sua biblioteca.\n");
                    x=1;
                    while(co==0)
                    {
                    if(livro[x]->codigo == -1)
                        {
                        printf("Entre com o titulo do livro.\n");
                        fflush(stdin);
                        gets(livro[x]->titulo);
                        printf("Entre com o autor do livro.\n");
                        fflush(stdin);
                        gets(livro[x]->autor);
                        printf("Entre com o nome da editora.\n");
                        fflush(stdin);
                        gets(livro[x]->editora);
                        printf("Entre com o ano de seu livro.\n");
                        fflush(stdin);
                        scanf("%d",& livro[x]->ano);
                        printf("Entre com o codigo do livro.\n");
                        fflush(stdin);
                        scanf("%d",&livro[x]->codigo);
                        livro[x]->emprestado=1;
                        printf("Digite 0 para cadastrar outro livro ou 1 para sair do cadastro.\n");
                        scanf("%d",&co);
                        system("cls");
                        }
                        x++;
                    }
                    system("cls");
}
int main(){
    stante livro[MAX];
    cadastro(&livro);
    return 0;
    }

já estou ficando sem cabelos com isso kkkkkkkk HELP ME! :unsure:

Editado por erickstryck
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Existem alguns problemas no seu código:

1) Se você tem a definição MAX, use-a também no for de inicialização.

2) Os índices dois vetores em C começam em zero. Assim tanto na inicialização quanto ao receber os dados, inicie x com zero. Deve ficar assim:

for(x=0;x<MAX;x++) {
  livro[x]->codigo = -1;
}
printf("Nesta opção você ira incluir os livors em sua biblioteca.\n");
x=0;
3) A função cadastro deve receber apenas um ponteiro para a estrutura e não um vetor de ponteiros.Aqui está o seu grande problema no código. Mude a função para:
void cadastro(stante *livro)
Você deve chamar a função assim:
cadastro(livro);
E acessar os membros com o operador ponto:
livro[x].codigo = -1;

4) Evite usar variáveis globais e dê nomes mais explicativos às variáveis. Será mais fácil de entender e manter o código... :)

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

  • 0
Olá!

Existem alguns problemas no seu código:

1) Se você tem a definição MAX, use-a também no for de inicialização.

2) Os índices dois vetores em C começam em zero. Assim tanto na inicialização quanto ao receber os dados, inicie x com zero. Deve ficar assim:

for(x=0;x<MAX;x++) {
  livro[x]->codigo = -1;
}
printf("Nesta opção você ira incluir os livors em sua biblioteca.\n");
x=0;
3) A função cadastro deve receber apenas um ponteiro para a estrutura e não um vetor de ponteiros.Aqui está o seu grande problema no código. Mude a função para:
void cadastro(stante *livro)
Você deve chamar a função assim:
cadastro(livro);
E acessar os membros com o operador ponto:
livro[x].codigo = -1;

4) Evite usar variáveis globais e dê nomes mais explicativos às variáveis. Será mais fácil de entender e manter o código... :)

Abraços,

Marcelo Utikawa da Fonseca

Na verdade livro e um ponteiro de uma strutura então não se pode acessar ele atraves de um ponto isso seria se fosse uma strutura normal mais com e ponteiro deve usar "->".

Ex: livro->codigo

Editado por GuiEsquilo
Link para o comentário
Compartilhar em outros sites

  • 0

Realmente deve ser utilizado o -> para ponteiros. Mas nesse caso existe o índice (os colchetes com o x). Nessa situação não se usa o -> pois o índice funcionaria como o *:

stante livro[10], *plivro;

plivro = livro;

plivro.codigo = 0; // ERRADO
plivro->codigo = 0; // CORRETO

(*plivro)->codigo = 0; // ERRADO
(*plivro).codigo = 0; // CORRETO

plivro[0]->codigo = 0; // ERRADO
plivro[0].codigo = 0; // CORRETO

Com relação ao restante que eu falei, funcionou?

Abraços,

Marcelo Utikawa da Fonseca

Link para o comentário
Compartilhar em outros sites

  • 0
Realmente deve ser utilizado o -> para ponteiros. Mas nesse caso existe o índice (os colchetes com o x). Nessa situação não se usa o -> pois o índice funcionaria como o *:

stante livro[10], *plivro;

plivro = livro;

plivro.codigo = 0; // ERRADO
plivro->codigo = 0; // CORRETO

(*plivro)->codigo = 0; // ERRADO
(*plivro).codigo = 0; // CORRETO

plivro[0]->codigo = 0; // ERRADO
plivro[0].codigo = 0; // CORRETO
Com relação ao restante que eu falei, funcionou? Abraços, Marcelo Utikawa da Fonseca
na verdade eu estava com problemas em fazer a função funcionar na hora de definir o tipo da função mais então eu li uns livros e achei a solução que seria a aritimetica de ponteiro olhe como ficou:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 500
int sa,x,cod,li,sa2,co=0,ex,p;

typedef struct {
    char titulo[30],autor[30],editora[30];
    int ano,emprestado,codigo;    
}stante;

//aqui é a função
void cadastro (stante *livro)
{
                    for(x=1;x<=500;x++)
                    {
                    livro[x].codigo = -1;
                    }
                    printf("Nesta opção você ira incluir os livors em sua biblioteca.\n");
                    x=1;
                    while(co==0)
                    {
                    if(livro[x].codigo == -1)
                        {
                        printf("Entre com o titulo do livro.\n");
                        fflush(stdin);
                        gets(livro[x].titulo);
                        printf("Entre com o autor do livro.\n");
                        fflush(stdin);
                        gets(livro[x].autor);
                        printf("Entre com o nome da editora.\n");
                        fflush(stdin);
                        gets(livro[x].editora);
                        printf("Entre com o ano de seu livro.\n");
                        fflush(stdin);
                        scanf("%d",& livro[x].ano);
                        printf("Entre com o codigo do livro.\n");
                        fflush(stdin);
                        scanf("%d",&livro[x].codigo);
                        livro[x].emprestado=1;
                        printf("Digite 0 para cadastrar outro livro ou 1 para sair do cadastro.\n");
                        scanf("%d",&co);
                        system("cls");
                        }
                        x++;
                    }
                    system("cls");
}
int main(){
    stante reg[MAX];//aritimetica de ponteiro
    stante *livro;//aritimetica de ponteiro
    livro=& reg[0];//aritimetica de ponteiro
    cadastro (livro);
    return 0;
    }

funcionou perfeitamente, mesmo assim obrigado pela atenção ao meu problema espero que minha solução seja util para outras pessoas. :rolleyes:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...