How to assign array of characters in a structure?

2

The program reads 10 movies, each movie has genre name, and age rating, then the list;

I can not assign array of string (I believe this is only this error)

   #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");
  }

  }
    
asked by anonymous 25.10.2018 / 22:37

1 answer

2

The code has a huge amount of errors, not just what is described. I do not know if I'll talk about them at all.

You are mixing concepts. Or create a vector of films inside the structure or out, in the two makes no sense. Actually inside also does not in this case, so leave it alone.

Since there is a macro with the string size definition of names, let's give it a better name and add one more character to the terminator.

I solved the reading properly, which I used does not work in all situations.

Since data that is string is already pointers, you do not need to 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");
    }
}

See running on ideone . And no Coding Ground . Also I placed GitHub for future reference .

    
25.10.2018 / 23:09