Ir ao conteúdo
  • Cadastre-se

Dúvida de iniciante - struct, function, pointer


Ir à solução Resolvido por MassakiMsk,

Posts recomendados

Seguinte galera. Sou novo no fórum. Curso engenharia mecânica, não manjo muito de programação. Porém tenho uma cadeira obrigatória de C. Tinha feito já uma cadeira de C++ em uma outra universidade, mas quando transferi de instituição não me deixaram aproveitá-la :mad: .

Tenho uma tarefa onde devo criar um struct para cadastrar algumas características para 10 livros. Porém o cadastro deve ser feito através de uma segunda função, externa a main. Para isso estou tentando repassar o meu struct através de ponteiros para essa função. É aí que estou tendo o problema. O erro ocorre no case 1. Já tentei pesquisar, mas como não conheço nem sites bons relacionados ao assunto não encontrei nada que me solucionasse o problema. Também testei várias possibilidades. Caso alguém tenha uma sugestão de uma abordagem diferente, anexei o exercício (é o primeiro do arquivo).O código não está completo, mas é o suficiente para entender o que estou tentando fazer. Devem haver mais erros em relação aos ponteiros, pois ainda não entendi corretamente o seu funcionamento, se puderem indicá-los ficaria grato. Toda crítica é bem-vinda. Obrigado pela atenção!

Segue abaixo o que consegui elaborar do código até o momento:

 

#include<stdio.h>
#include<locale.h>
#include<stdlib.h>
#include<string.h>
 
struct descricao
    {char titulo [16];
    char autor [21];
    char estilo [11];
    int codigo;
    float preco;};
 
void cadastro (struct descricao*livro,int *k)
{
    printf("Esse é o cadastro de número %d.\n",k);
    printf("Digite o título do livro (até 15 caracteres):");
    scanf("%s",&livro->titulo);
    printf("Digite o autor do livro(até 20 caracteres):");
    scanf("%s",&livro->autor);
    printf("Digite o estilo do livro (até 10 caracteres):");
    scanf("%s",&livro->estilo);
    printf("Digite o código do livro:");
    scanf("%d",&livro->codigo);
    printf("Digite o preço do livro:");
    scanf("%f",&livro->preco);
    (*k)=(*k)+1;
}
 
 
int main( )
{
setlocale(LC_ALL, "Portuguese");
int k=0;
int i;
typedef struct descricao livro [10];
printf("--------------MENU DE OPÇÕES--------------\n");
printf("1-Cadastro de livros (máximo de 10 livros).\n");
printf("2-Consulta de livros.\n");
printf("3-Sair do programa.\n");
scanf("%d",&i);
system("cls");
 
switch (i)
{
case 1:
    cadastro(&livro[k],&k);
case 2:
 
case 3:
 
default:
    printf ("Número inválido!\n");
    system ("PAUSE");
    system ("cls");
    break;
}
}
 

 

 

13.3 - Ep 13.pdf

Link para o comentário
Compartilhar em outros sites

  • Solução

Talvez eu esteja falando besteira, mas é assim que eu consegui fazer funcionar:

Desculpa nao conseguir usar o quadro de codigo, estou no cel e nao tem a opção

#include<stdio.h>

#include<locale.h>

#include<stdlib.h>

#include<string.h>

struct descricao

{char titulo [16];

char autor [21];

char estilo [11];

int codigo;

float preco;};

void cadastro (struct descricao livro[], int k)

{

printf("Esse é o cadastro de número %d.\n",k);

printf("Digite o título do livro (até 15 caracteres):");

scanf("%s",&livro[k].titulo);

printf("Digite o autor do livro(até 20 caracteres):");

scanf("%s",&livro[k].autor);

printf("Digite o estilo do livro (até 10 caracteres):");

scanf("%s",&livro[k].estilo);

printf("Digite o código do livro:");

scanf("%d",&livro[k].codigo);

printf("Digite o preço do livro:");

scanf("%f",&livro[k].preco);

k=k+1;

}

int main( )

{

setlocale(LC_ALL, "Portuguese");

int k=0;

int i;

struct descricao livro[10];

printf("--------------MENU DE OPÇÕES--------------\n");

printf("1-Cadastro de livros (máximo de 10 livros).\n");

printf("2-Consulta de livros.\n");

printf("3-Sair do programa.\n");

scanf("%d",&i);

system("cls");

switch (i)

{

case 1:

cadastro(livro, k);

break;

case 2:

case 3:

default:

printf ("Número inválido!\n");

system ("PAUSE");

system ("cls");

break;

}

}

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