Compile error in C ++ when accessing structure in function

0

I am creating a code that stores the information of 3 people within a struct , but I am having a compile error when I save the age option in struct . The error is this:

/home/arthur/Área de Trabalho/pj/pj.cpp: In function ‘void 
cadastrar()’:
/home/arthur/Área de Trabalho/pj/pj.cpp:42:17: error: ‘pessoas’ was 
not declared in this scope
 //  scanf("%d",&pessoas[i].idade);

             ^~~~~~~

And the code is this:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#DEFINE MAX_PESSOAS[3]
typedef struct{
  char nome[30];
  char profissao[30];
  int  idade;
  int ativado;
}comp;

void cadastrar();

int main(int argc, char const *argv[]) {
  comp pessoas[3];

  int op;
  do{
    printf("\nPara adastrar pessoas aperte 1\n");
    scanf("%d", &op );
    getchar();
    switch (op) {
  case 1:
    cadastrar();
  break;
}
}while(op!=0);
}
void cadastrar(){
  char nome[30];
  char profissao[30];
  int idade;
  int op;
do{
  printf("\nNome: ");
  getchar();
  fgets(nome,sizeof(nome),stdin);
  printf("\nProfissão: ");
  fgets(profissao,sizeof(profissao),stdin);
  printf("\nIdade: ");
  scanf("%d", &idade);
for (size_t i = 0; i < 3; i++) {
  //if (pessoas[i].ativado==0) {
    strcpy(pessoas[i].nome, nome);
    strcpy(pessoas[i].profissao, profissao);
    pessoas[i].idade = idade;
    break;
//  }
}
  printf("\n1 - Continuar\n0 - para sair\n");
  printf("Digite sua escolha: ");
  scanf("%d", &op );
}while (op!=0);

}
    
asked by anonymous 02.11.2018 / 15:52

2 answers

1

The code has several problems, and gives an indication that it does not understand what it is doing. Learning to program should be step by step, learning to lay each brick to build the whole house, wanting to do the house without understanding every detail does not work and will be run over all the time. And it gets more and more complicated and harder to solve in the future. I've improved a lot of things in the code, but there are still many others that could be improved.

I did not see sense in this for and there is a lot of unnecessary constraints, but a fundamental one is missing, the variable that stores the data in the cadastrar() function. Since you created this in main() and for an exercise it makes sense you have to pass it as an argument to the function that makes the register, and of course, the function should receive it as a parameter.

I did not solve everything, I just improved and solved the problem described.

#include <stdio.h>

typedef struct {
    char nome[31];
    char profissao[31];
    int  idade;
    int ativado;
} Pessoa;

void cadastrar(Pessoa pessoas[3]) {
    int op;
    int i = 0;
    do {
        printf("\nNome: ");
        fgets(pessoas[i].nome, sizeof(pessoas[i].nome), stdin);
        printf("\nProfissão: ");
        fgets(pessoas[i].profissao, sizeof(pessoas[i].profissao), stdin);
        printf("\nIdade: ");
        scanf("%d", &pessoas[i].idade);
        printf("\n1 - Continuar\n0 - para sair\n");
        printf("Digite sua escolha: ");
        scanf("%d", &op);
        i++;
    } while (i < 3 && op != 0);
}

int main() {
    Pessoa pessoas[3];
    int op;
    do {
        printf("\nPara cadastrar pessoas aperte 1\n");
        scanf("%d", &op);
        switch (op) {
        case 1:
            cadastrar(pessoas);
            break;
        }
    } while (op != 0);
}

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

    
02.11.2018 / 16:24
0

Better a pure C ++ solution:

#include <iostream>
#include <string>
#include <vector>

struct Pessoa {
    std::string nome;
    std::string profissao;
    int idade;
    bool ativado;
};

void cadastrar(std::vector<Pessoa>& pessoas)
{
    int op = 0;
    do {
        Pessoa p;
        std::cout << "\nPessoa: ";
        std::cin >> p.nome;

        std::cout << "\nProfissão: ";
        std::cin >> p.profissao;

        std::cout << "\nIdade: ";
        std::cin >> p.idade;

        pessoas.push_back(p);

        std::cout << "\n1 - continuar\n0 - sair\n";
        std::cin >> op;
    } while (op == 1);
}

int main() {
    std::vector<Pessoa> pessoas;

    int op;
    do {
        std::cout << "\nPara cadastrar pessoas aperte 1\n 0 - sair\n";
        std::cin >> op;
        if (op == 1) {
            cadastrar(pessoas);
            break;
        }
    } while (op != 0);
}
    
06.11.2018 / 15:55