Ir ao conteúdo

Ajuda, iniciante, Linguagem C: struct


wesleyWWW

Posts recomendados

Postado

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 ?
Postado

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.

Postado

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

Postado

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()".

Postado

Ah, entendi, pra fazer leitura de string com espaço é esse comando então... Funciono agora.

Eu reparei sim no espaço antes do % + não sabia o porque dele, valeu por me dizer.

Arquivado

Este tópico foi arquivado e está fechado para 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...