How do I store data in a struct and then use it in different functions?

1

I'm trying to schedule this work for days and I can not get out of the corner, it's a library system that needs to be:

  • a) Register, view, change, and remove data from a book;
  • b) Register, view, change and remove new clients;
  • c) Make a new loan;
  • d) Perform a return;
  • e) List all books loaned to a customer;

My biggest problem is to store the data and use them again, I create the pointer to a struct and when I try to use the data, I can not get it follow what you can do so far

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


struct livro{
    char titulo[81];
    char autor[41];
    char editora[31];
    int ano;
    int codigo;
};

typedef struct cliente{
    char *nome[50];
    char *cpf[11];
    char *matricula[6];     
}cliente;

int main(){
    FILE *file; 
void MenuSecundario();
void VisualizarDados();
    int opcao, menu, i;
    do
    {
    printf("\t\t\nSelecione uma das opcoes: \n");
    printf("1. Cadastrar, altera ou remover dados de cliente: \n");
    printf("2. Cadastrar, altera ou remover livro : \n");
    printf("3. Visualizar dados de clientes: \n");
    printf("4. Visualizar dados de livros: \n");
    printf("5. Realizar novo emprestimo: \n");
    printf("6. Realizar devolucao: \n");
    printf("0. Sair\n");
    printf("Opcao: ");
    scanf("%d", &opcao);

    switch( opcao ){

    case 0:
    system("cls || clear");
    printf("Fechando progama...\n");
    break;
    case 1:
    system("cls || clear");
    cliente kirito;
    MenuSecundario(&kirito);
    break;
    case 2:
    system("cls || clear");

    break;
    case 3:
    VisualizarDados();
    system("cls || clear");

    break;
    case 4:
    system("cls || clear");

    break;
    case 5:
    system("cls || clear");

    break;
    case 6:
    system("cls || clear");

    break;  
    default:
    system("cls || clear");
    printf("Opcao invalida! Tente novamente.\n");
}
    } while(opcao);

    return 0;
}

void MenuSecundario(cliente *kirito[50]){
    int menu,i,aux=1;
    int pos=0;
    do{
    system("cls || clear");
    printf("Selecione uma das opcoes: \n");
    printf("1. Cadastrar novo cliente: \n");
    printf("2. Alterar dados de clientes: \n");
    printf("3. Remover cliente: \n");
    printf("0. Sair\n");
    printf("Opcao: ");
    scanf("%d", &menu);


    switch(menu){

    case 0:
    system("cls || clear");
    printf("Saindo do menu...\n");
    break;
    case 1:
    system("cls || clear");
    printf("\n--------------------------Cadastrar novo cliente--------------------------\n");
    printf("\n\n");
    for(i=0; i<50; i++){
        while(aux==1){
    printf("Digite o nome do cliente: \n");
    scanf(" %[^\n]s", &kirito[i]->nome);
    printf("Digite o cpf do cliente: \n");
    scanf(" %[^\n]s", &kirito[i]->cpf);
    printf("Digite a matricula do cliente: \n");
    scanf(" %[^\n]s", &kirito[i]->matricula);
    system("cls || clear");
    printf("Deseja cadastrar novo usuario ?\n");
    printf("1. sim.\n");
    printf("2. nao.\n");
    printf("opcao:");
    scanf("%d", &aux);
    system("cls || clear");
    }
}
break;

    case 2:
    system("cls || clear");

    break;

    case 3:
    system("cls || clear");

    break;
    default:
    system("cls || clear");
    printf("Opcao invalida! Tente novamente.\n");
  }
 }while(menu);
}

void VisualizarDados(cliente *kirito){
    int i;
    for(i=0; i<50; i++){
    printf("%s", kirito->nome);
}
}
    
asked by anonymous 22.06.2018 / 17:25

1 answer

0

Since you have used a sequential list, the function that displays the information also needs to be used.

void VisualizarDados(cliente *kirito) { 
    int i; 
    for(i=0; i<50; i++) { 
        printf("%s", kirito[i]->nome); //alteração nessa linha
    }
}

I recommend that you use a more dynamic list. This is a good example to get you started with linked list .

    
22.06.2018 / 17:46