Jump to content
Fórum Script Brasil
  • 0

não imprime o que salvei na struct , codigo abaixo


Question

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


#define const 5

struct cadastro{
    int cod;
    char autordaobra[50];
    char obra[50];
    char editora[50];
};

int i, j, cad, opcao;
struct cadastro livro[const];

void mostrar() {

if(i != 0) {
        
                for(j=0; j<i; j++){    
                printf ("Código: %d\n", livro.cod);
                   printf ("Autor da obra: %s\n",livro.autordaobra);
                printf ("Obra: %s\n", livro.obra);
                printf ("Editora: %s\n\n",livro.editora);
                                  }
                           }
                           
                else
                printf("Lista vazia!\n");
}

void cadastro(){
    
 if (i <const){
                    
            system("cls");
            printf("1 – Inserir um novo cadastro\n");
            printf("2 – Mostrar todos os cadastros\n");
            printf("0 – Encerrar\n");
            fflush(stdin);
            livro.cod = i+1;
            fflush(stdin);
            printf("Insira o nome do autor da obra %d:\n", i+1);
            fflush(stdin);
            gets(livro.autordaobra);
            fflush(stdin);
              printf("Insira o nome da obra %d:\n", i+1);
            gets(livro.obra);
            fflush(stdin);
            printf("Insira o nome da editora %d:\n", i+1);
            gets(livro.editora);
            fflush(stdin);
            system("cls");
            printf("1 – Inserir um novo cadastro\n");
            printf("2 – Mostrar todos os cadastros\n");
            printf("0 – Encerrar\n");
            
            i = i+1;
            
                     }
                         
            else
            printf("Sistema de cadastro lotado. Não é possível armazenar mais informações!\n");      
    
}

int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "Portuguese");
    
    printf("1 – Inserir um novo cadastro\n");
    printf("2 – Mostrar todos os cadastros\n");
    printf("0 – Encerrar\n");
    
    i = 0;
    opcao = 0;
do{
    
    while(!scanf ("%d", &opcao)) {
        while(getchar() != '\n');
        printf("Erro: opção inválida!\n");
    }
    
    if (opcao > 2)
    {printf("Erro: opção inválida!\n");
    }

  else
  switch(opcao)
  {
      case 1:
         
       cadastro();                
         break;
         
     case 2:
            
        mostrar();
        break;
               
 }
                    

}while(opcao != 0);

   return 0;    
 }

Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define const 5

typedef struct{
    int cod;
    char autordaobra[50];
    char obra[50];
    char editora[50];
}cadastro;

int i, j, cad, opcao, f1 = 0;
cadastro *livro[const];//1º - Criar Ponteiro

void mostrar(cadastro *livro){
    /*if(i != 0){
        for(j=0; j<i; j++){
            printf ("Código: %d\n", livro.cod);
            printf ("Autor da obra: %s\n",livro.autordaobra);
            printf ("Obra: %s\n", livro.obra);
            printf ("Editora: %s\n\n",livro.editora);
        }
    }
    else
        printf("Lista vazia!\n");*/

    system("cls");
    printf("\n");

    for(i=0; i<const; i++){
            printf ("Código: %d\n", livro[i].cod);
            printf ("Autor da obra: %s\n", livro[i].autordaobra);
            printf ("Obra: %s\n", livro[i].obra);
            printf ("Editora: %s\n\n",livro[i].editora);
    }
    printf("\n\n");
    system("pause");
    system("cls");
}

int cadastroo(cadastro *livro){//Mudar o nome da função.
    /*if(i <const){
        system("cls");
        printf("1 – Inserir um novo cadastro\n");
        printf("2 – Mostrar todos os cadastros\n");
        printf("0 – Encerrar\n");
        fflush(stdin);
        livro.cod = i+1;
        fflush(stdin);
        printf("Insira o nome do autor da obra %d:\n", i+1);
        fflush(stdin);
        gets(livro.autordaobra);
        fflush(stdin);
        printf("Insira o nome da obra %d:\n", i+1);
        gets(livro.obra);
        fflush(stdin);
        printf("Insira o nome da editora %d:\n", i+1);
        gets(livro.editora);
        fflush(stdin);
        system("cls");
        printf("1 – Inserir um novo cadastro\n");
        printf("2 – Mostrar todos os cadastros\n");
        printf("0 – Encerrar\n");

        i = i+1;
    }
    else
        printf("Sistema de cadastro lotado. Não é possível armazenar mais informações!\n");*/
    int i = 0, newbook, tem = 0, cont = 0, contMax = 0;

    for(i=0; i<const; i++){ //Livro zero significa que não tem livro, esse for verifica o livro e os livrpos ativos ate o valor chegar ao total do const.
        if(livro[i].cod != 0){
            contMax++;
        }
    }

    if(contMax == const){ //Aqui verifica se o sistema esta lotado.
        printf("\nSistema de cadastro lotado. Não é possível armazenar mais informações!\n");
        system("pause");
        system("cls");
    }
    else{
        do{
            fflush(stdin);
            printf("Insira o Cod. do livro %d: ", cont+1);
            scanf("%d", &newbook);
            tem = 0;

            for(i=0; i<const; i++){ //Este for verifica se o livro esta cadastrada, caso sim, muda a variavel tem para 1.
                if(newbook == livro[i].cod){
                    tem = 1;
                }
            }

            if(tem == 0){ //Caso a variavel tem esteja como zero, inicia o cadastro.
                livro[cont].cod = newbook;
                fflush(stdin);
                printf("Insira o nome do autor da obra %d: ", cont+1);
                scanf("%[^\n]s", &livro[cont].autordaobra);
                fflush(stdin);
                printf("Insira o nome da obra %d: ", cont+1);
                scanf("%[^\n]s", &livro[cont].obra);
                fflush(stdin);
                printf("Insira o nome da editora %d: ", cont+1);
                scanf("%[^\n]s", &livro[cont].editora);
                fflush(stdin);
                printf("\nLivro cadastrado com sucesso!\n");
                printf("\n");
                system("pause");
                system("cls");
            }
            else{ //Caso a variavel tem esjeja com o valor 1, cai aqui e diminui o contadador para que o do while seja iniciado novamente.
                cont = cont - 1;
                printf("\nJa existe livro cadastrado com este numero!!\n");
                system("pause");
            }
            cont++;
        }while(cont < const);
    }
    system("cls");
    return(livro[i].cod);
}

int main(int argc, char *argv[]){
    setlocale(LC_ALL, "Portuguese");
    /*printf("1 – Inserir um novo cadastro\n");
    printf("2 – Mostrar todos os cadastros\n");
    printf("0 – Encerrar\n");

    i = 0;
    opcao = 0;
    do{
        while(scanf ("%d", &opcao)){
            while(getchar() != '\n');
            printf("Erro: opção inválida!\n");
        }

        if(opcao > 2){
            printf("Erro: opção inválida!\n");
        }
        else
            switch(opcao){
                case 1:
                    cadastro();
                    break;

                case 2:
                    mostrar();
                    break;
            }
    }while(opcao != 0);
    return 0;*/

    //cadastro livro[const];

    /*for(i=0; i<const; i++){//zera a struct
        livro[i].cod = 0;
        strcpy(livro[i].autordaobra, "NULL");
        strcpy(livro[i].obra, "NULL");
        strcpy(livro[i].editora, "NULL");
    }*/

    do{
        printf("1 - Inserir um novo cadastro\n");
        printf("2 - Mostrar todos os cadastros\n");
        printf("0 - Encerrar L106\n");
        scanf("%i", &opcao);

        switch(opcao){
            case 1:
                system("cls || clear");
                f1 = cadastroo(livro);
                break;

            case 2:
                system("cls || clear");
                mostrar(livro);
                break;
                default:
                    system("cls || clear");
        }
    }while(opcao != 0);
    return 0;
}

 

Em 05/07/2019 em 03:42, lop3s disse:

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


#define const 5

struct cadastro{
    int cod;
    char autordaobra[50];
    char obra[50];
    char editora[50];
};

int i, j, cad, opcao;
struct cadastro livro[const]; >> aqui criou o vetor do struct

void mostrar() {

if(i != 0) {
        
                for(j=0; j<i; j++){    
                printf ("Código: %d\n", livro.cod);
                   printf ("Autor da obra: %s\n",livro.autordaobra);
                printf ("Obra: %s\n", livro.obra);
                printf ("Editora: %s\n\n",livro.editora);
                                  }
                           }
                           
                else
                printf("Lista vazia!\n");
}

void cadastro(){ >> no meu compilador ele não aceitou essa função com o mesmo nome da struct.
    
 if (i <const){
                    
            system("cls");
            printf("1 – Inserir um novo cadastro\n");
            printf("2 – Mostrar todos os cadastros\n");
            printf("0 – Encerrar\n");
            fflush(stdin);
            livro.cod = i+1; >> como você criou um vetor de struct faltou add o indice marcar a posição que esta sendo gravado.
            fflush(stdin);
            printf("Insira o nome do autor da obra %d:\n", i+1);
            fflush(stdin);
            gets(livro.autordaobra);
            fflush(stdin);
              printf("Insira o nome da obra %d:\n", i+1);
            gets(livro.obra);
            fflush(stdin);
            printf("Insira o nome da editora %d:\n", i+1);
            gets(livro.editora);
            fflush(stdin);
            system("cls");
            printf("1 – Inserir um novo cadastro\n");
            printf("2 – Mostrar todos os cadastros\n");
            printf("0 – Encerrar\n");
            
            i = i+1;
            
                     }
                         
            else
            printf("Sistema de cadastro lotado. Não é possível armazenar mais informações!\n");      
    
}

int main(int argc, char *argv[]) {
    setlocale(LC_ALL, "Portuguese");
    
    printf("1 – Inserir um novo cadastro\n");
    printf("2 – Mostrar todos os cadastros\n");
    printf("0 – Encerrar\n");
    
    i = 0;
    opcao = 0;
do{
    
    while(!scanf ("%d", &opcao)) {
        while(getchar() != '\n');
        printf("Erro: opção inválida!\n");
    }
    
    if (opcao > 2)
    {printf("Erro: opção inválida!\n");
    }

  else
  switch(opcao)
  {
      case 1:
         
       cadastro();                
         break;
         
     case 2:
            
        mostrar();
        break;
               
 }
                    

}while(opcao != 0);

   return 0;    
 }

Meio que refatorei parte do código e preservei comentado o seu para que você possa analisar as modificações.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644531
×
×
  • Create New...