Ir ao conteúdo
  • Cadastre-se

Ajuda, iniciante, Linguagem C: struct


wesleyWWW
Ir à solução Resolvido por wesleyWWW,

Posts recomendados

Estou com umas dúvidas e tenho certeza que pra quem entende de programação vai parecer algo bem fácil e i.diota... Eu estou iniciando, aprendendo ainda, então me desculpem pelas dúvidas idiotas em coisas fáceis... 

o que eu quero fazer é bem simples, por enquanto só quero cadastrar filmes com Struct, e depois mostrar eles...

Aqui o comando que iniciei: 
 

#include <stdio.h>#include <stdlib.h>struct filmes {char nome[20];char genero[20];int classificacao;};int main(){int opcao;struct filmes f;while(1){printf("Digite 1 para cadastrar filmes, 2 para ver filmes e 3 para sair: ");scanf("%d",&opcao);switch (opcao) {  case 1: printf("Digite o nome do filme: ");scanf("%s",f.nome);printf("Digite o gênero do filme: ");scanf("%s",f.genero);printf("Digite a classificação etária do filme(somente números): ");scanf("%d",&f.classificacao);break;  case 2:printf("Nome:%s\n ",f.nome);printf("Gênero:%s\n ",f.genero);printf("Classificação etária:%d\n ",f.classificacao);break;case 3:return 0;break;}}}


Como da pra ver pelo comando, não vai fazer o que eu quero... Vai aparecer pra digitar 1 pra cadastrar, 2 pra ver e 3 pra sair... Se eu cadastrar algo e depois digitar 2 pra ver, vai aparecer, mas se eu cadastrar algo e depois cadastrar de novo outro, só vai mostrar o último que eu cadastrei, e preciso que mostre todos, então que comando exatamente eu uso ? E no cadastro, na parte de digitar o nome e gênero, se eu escrever algo com espaço, 2 palavras, buga em vez de mostrar só o próximo printf na tela, mostra junto os 2 próximos printf, porque ?
Link para o comentário
Compartilhar em outros sites

Bem simples.

Só definir a variável "f" para servir como um vetor "f[x]", onde "x" será a quantidade de posições permitidas para armazenar filmes.

#include <stdio.h>#include <stdlib.h>#define QTD_FILMES 10struct filmes{    char nome[20];    char genero[20];    int classificacao;};int main(void){    int opcao = 0;    int qtdCadastrada = 0;    int tmp = 0;    struct filmes f[QTD_FILMES];    while(1)    {        printf("Digite 1 para cadastrar filmes, 2 para ver filmes e 3 para sair: ");        scanf(" %d", &opcao);        switch (opcao)        {            case 1:                if ( qtdCadastrada >= QTD_FILMES )                {                    printf("\n## Limite de cadastros alcancado ##\n\n");                    break;                }                printf("Digite o nome do filme: ");                scanf(" %s", f[qtdCadastrada].nome);                printf("Digite o gênero do filme: ");                scanf(" %s", f[qtdCadastrada].genero);                printf("Digite a classificação etária do filme(somente números): ");                scanf(" %d", &f[qtdCadastrada].classificacao);                qtdCadastrada++; // O mesmo que: qtdCadastrada = qtdCadastrada + 1;                break;            case 2:                for ( tmp = 0; tmp < qtdCadastrada; tmp++ )                {                    printf("Nome: %s\n", f[tmp].nome);                    printf("Gênero: %s\n", f[tmp].genero);                    printf("Classificação etária: %d\n\n", f[tmp].classificacao);                }                break;            case 3:                return 0;                break;        }    }    return 0;}

Att.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

valeu mesmo cara, era isso mesmo que eu precisava...Me ajudo bastante...Só uma coisa, quando vou cadastrar algo, se eu no nome por exemplo, digitar uma palavra, dar espaço e digitar outra palavra, quando aperto Enter buga e aparece os 2 próximos printf juntos, porque ?

Agora tem outras coisas que preciso adicionar, preciso que o programa receba a idade de uma pessoa e mostre os nomes dos filmes que ela pode assistir(conforme a classificação etária) e indicando os gêneros...Essa parte eu não tentei fazer ainda porque eu tinha que conseguir a primeira que tu me ajudou, agora vou tentar fazer essa segunda parte...
Se tiver alguma dica de qual comando devo usar já ajuda bastante...

Vou tentar fazer e qualquer coisa volto aqui com o comando...

Thanks

Link para o comentário
Compartilhar em outros sites

Para fazer leitura de string com espaço:

scanf(" %[^\n]s", f[qtdCadastrada].nome);
Sobre "bugar", você reparou que estou usando um espaço antes do "%" na função "scanf()"?

Ele serve para ignorar o caracter do "BUG", que nada mais é do que remover o caracter da tecla ENTER que estava armazenado no buffer da chamada anterior da função "scanf()".

  • Curtir 1
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...