How to assign character array in a structure?

Asked

Viewed 84 times

2

The program reads 10 films, each film has gender name, and age rating, then lists;

I’m having trouble assigning matrix string (I think it’s just that mistake)

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

   #define quantidade_filmes 10
   #define tamanho_filme 30

typedef struct
{
char nome_filme[quantidade_filmes][tamanho_filme];
char genero_filme[quantidade_filmes][tamanho_filme];
int classificacao[quantidade_filmes];
/*0- menor que 18 anos
1-maior que 18 anos*/
} Dados;

 int main()
{
Dados dados[quantidade_filmes][tamanho_filme];
int i;

for(i=0; i<tamanho_filme; i++)
{
    system("CLS");
    fflush(stdin);
    printf("Cadastrando filme de numero %i \n",i+1);
    printf("Digite o nome do filme:\n");
    scanf("%[^\n]",&dados[i].nome_filme);
    printf("Qual o genero do %s ? \n",dados.nome);
    fflush(stdin);
    scanf("%[^\n]",&dados[i].genero_filme);
    fflush(stdin);
    printf("O filme e para maiores de 18 anos? 0-nao 1-sim \n");
    scanf("%d",&dados[i].classificacao);
    fflush(stdin);
}

for(i=0;i<quantidade_filmes;i++){
printf("NOME: %s\n",dados[i].nome_filme);
printf("GENERO: %s\n",dados[i].genero_filme);
if(dados[i].classificacao==0){
    printf("FILME DESTINADO AO PUBLICO MAIOR DE 18 ANOS\n");
    }        else{
        printf("FILME LIVRE PARA TODOS OS PUBLICOS\n");
  }
               printf("\n");
  }

  }
  • Explain your difficulty better.

  • Compiler error at read time of data. (the first is integer)

1 answer

2


The code has a huge amount of errors, it’s not just what is described. I don’t even know if I will talk about all.

It’s mixing concepts. Either it creates a vector of films inside the structure or outside, in both of them it doesn’t make sense. Actually inside doesn’t do either in this case, so just leave it out.

Since there is a macro with the definition of the size of string of names, let’s give her a better name and put an extra character to the terminator.

I have resolved the reading of the buffer, what had used does not work in all situations.

Like the data that is string are already pointers need not pass by reference.

Note that I simplified and organized the code as well.

#include <stdlib.h>
#define quantidade_filmes 2
#define tamanho_nome 31

typedef struct {
    char nome_filme[tamanho_nome];
    char genero_filme[tamanho_nome];
    int classificacao;
} Dados;

int main() {
    Dados dados[quantidade_filmes];
    for (int i = 0; i < quantidade_filmes; i++) {
        printf("Cadastrando filme de numero %i \n", i + 1);
        printf("Digite o nome do filme:\n");
        scanf("%[^\n]\n", dados[i].nome_filme);
        printf("Qual o genero do %s ?\n", dados[i].nome_filme);
        scanf("%[^\n]\n", dados[i].genero_filme);
        printf("O filme e para maiores de 18 anos? 0-nao 1-sim\n");
        scanf("%d\n", &dados[i].classificacao);
    }
    for (int i = 0; i < quantidade_filmes; i++) {
        printf("NOME: %s\n", dados[i].nome_filme);
        printf("GENERO: %s\n", dados[i].genero_filme);
        if (dados[i].classificacao == 0) printf("FILME DESTINADO AO PUBLICO MAIOR DE 18 ANOS\n\n");
        else printf("FILME LIVRE PARA TODOS OS PUBLICOS\n\n");
    }
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

  • Now I understand, thank you very much.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.