Vector size in C

0

I'm new to the C language and am having trouble determining the size of struct-type vectors.

Example. I have a category-type structure with three types of variables 1 int and 2 char.

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


struct categoria_st{
    char nome_categ[25];
    int num_subcateg;
    char subcateg_st
};

Now, I intend to create a dynamic vector of type struct categorias_st through a question inside the main function. I thought of something like:

int main(){
struct categoria_st cat;
int n_categ;



   printf("Quantas categorias queres adicionar?\n");
    scanf("%d", &n_categ);
    return 0;

}

However, I do not know how to do this in C language.

    
asked by anonymous 04.02.2018 / 03:32

2 answers

0
  

I'm not the best person to answer, but I'm learning from it.

Below is a step-by-step example of what you were testing at repl.it

First we create the struct here the identifier is s_products

struct s_produtos
{
  int codigo;
  char nome[20];
};

We define two variables of type int

// Recebera o valor informado pelo usuário
int qnt = 0;
// A cada loop guardara a posição no qual sera adicionado
// o produto
int posicao = 0;

Read the keyboard input and store the value entered in% with%

printf("Quantas produtos deseja adicionar?:");
scanf(" %d", &qnt);

We create the variable qnt of type protudos and set its size with the value of s_produtos

struct s_produtos produtos[qnt];

We loop and the user is asked to enter the data.

for(posicao; posicao < qnt; posicao++) {
  printf("\n");
  printf("Informe o código:");
  scanf("%d", &produtos[posicao].codigo);
  flush_in();// Limpa o teclado
  printf("Informe o nome:");
  // Usei gets pois scanf para no espaço e não pega a linha toda, ex:
  // Leite em Pó
  // Só retorna: Leite
  gets(produtos[posicao].nome);

}

The qnt v function found in the SOpt > because flush_in was not working.

void flush_in() {
    int ch;
    do {
        ch = fgetc(stdin)
    } while (ch != EOF && ch != '\n');
}

Below we display the records on the screen

// Armazena o tamanho total do vetor
int total = sizeof(produtos)/sizeof(produtos[0]);
printf("\n\n");
printf("+--------- PRODUTOS ---------+\n");
for(int i = 0; i < total; i++) {
  printf("%d - %s\n", produtos[i].codigo, produtos[i].nome);
}
printf("+----------------------------+\n");
  

You can see it working at repl.it .

Reference

04.02.2018 / 08:03
1
#include <stdio.h>
#include <stdlib.h>


struct categoria_st{
  char nome_categ[25];
  int num_subcateg;
  char subcateg_st;
}

int main(){
  int n_categ;
  //primeiro pedir ao utilizador o numero de categorias
  printf("Quantas categorias queres adicionar?\n");
  scanf("%d", &n_categ);

  //neste momento já podes declarar a variável do tipo da estrutura definida
  //com o valor pretendido pelo utilizador
  struct categoria_st category[n_categ];

  return 0;

}

Initially a structure called categoria_st , consisting of 3 variables nome_categ , num_subcateg , subcateg_st is created.

No main is declared as a variable n_categ of integer type to store the size of categories to insert.

This value is stored in the address of the variable n_categ through scanf() .

Next, a% of the structure named category is then declared with the size entered by the user.

    
07.04.2018 / 19:17