Ir ao conteúdo
  • Cadastre-se

C++ Erros no void inserir


Pablo Fernandes

Posts recomendados

Comecei a trabalha com struct ai fiz esse codigo em c++ no void inserir na parte do if começou a da erro " expected primary-expression before" '[' token sei que o problema ta antes da [] ja mudei de cadastrar para reg e nada deu certo alguém tem ideia? 

 

#include <iostream>// biblioteca padrão de entrada e saida de c++
#include <string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
using namespace std;
 struct cadastrar{
    int op,i;
    char cid[MAX];
    char bairro[MAX];
    char escola[MAX];
    int sala[MAX];
    char prof[MAX];
    char materia[MAX];
    int carghora[MAX];
    int ativo;
}reg;

typedef struct aluno{
char nome[MAX];
char cid[MAX];
char bairro[MAX];
int serie[MAX];
char periodo[MAX];
}matricula;


int menu (void);
void inserir (void);
void buscar (void);
void excluir (void);
void listar (void);

int num,realoca=0;;


int main(void){
    int op;
    char cid[MAX];
    char bairro[MAX];
    char escola[MAX];
    int sala;
    char prof[MAX];
    char materia[MAX];
    int carghora[MAX];


  do{
        system("cls");
        op = menu();

  cout <<"MENU" << endl;
  cout <<"[1]=CADASTRAR" << endl;
  cout <<"[2]=BUSCAR" << endl;
  cout <<"[3]=EXCLUIR" << endl;
  cout <<"[4]=SAIR" << endl;
  cout <<"[5]=LISTAR" << endl;
  getchar();
  // estrutura switch
  switch(op){
      case 1:
    inserir();
    break;
    case 2:
        buscar();
    break;
    case 3:
        excluir();
         break;
    case 4:
        exit(0);
        break;
    case 5 :
        listar();
        break;
 }
}while(op!=0);

 //*****************
//Funçao Inserir
//****************/
void inserir()
{
 system("cls");
    char cid[MAX];
    char bairro[MAX];
    char escola[MAX];
    int sala[MAX];
    char prof[MAX];
    char materia[MAX];
    int carghora[MAX];
    int op;
    do{
        printf("\nCidade");
        fgets(cid,sizeof(cid),stdin);
        printf("\nBairro");
        fgets(bairro,sizeof(bairro),stdin);
        printf("\nEscola");
        fgets(escola,sizeof(escola),stdin);
        printf("\nSala");
        scanf("%d",&sala);
        printf("\nProf");
        fgets(prof,sizeof(prof),stdin);
        printf("\nMateria");
        fgets(materia,sizeof(materia),stdin);
        printf("\nCarga Horaria");
        scanf("%d",&carghora);
        for(int i=0;i < MAX ;++i)
        {
           if (cadastrar.ativo==0)  <<<<<<<<<<< ERRO
           strcpy(cadastrar.cid,cid);<<<<<<<<<<< ERRO
           strcpy(cadastrar.bairro,bairro);<<<<<<<<<<< ERRO
           strcpy(cadastrar.escola,escola);
           cadastrar.sala[0] = sala[0];
           strcpy(cadastrar.prof,prof);
           strcpy(cadastrar.materia,materia);
           cadastrar.carghora[1] = carghora[1];
           break;

        }
        printf("1- Continuar");
        printf("2- Sair");
        scanf("%d",&op);
    }while(op!=0);
}

#include <iostream>// biblioteca padrão de entrada e saida de c++
#include <string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
using namespace std;
 struct cadastrar{
	int op,i;
	char cid[MAX];
	char bairro[MAX];
	char escola[MAX];
	int sala[MAX];
	char prof[MAX];
	char materia[MAX];
	int carghora[MAX];
	int ativo;
}reg;

typedef struct aluno{
char nome[MAX];
char cid[MAX];
char bairro[MAX];
int serie[MAX];
char periodo[MAX];
}matricula;


int menu (void);
void inserir (void);
void buscar (void);
void excluir (void);
void listar (void);

int num,realoca=0;;


int main(void){
	int op;
	char cid[MAX];
	char bairro[MAX];
	char escola[MAX];
	int sala;
	char prof[MAX];
	char materia[MAX];
    int carghora[MAX];


  do{
        system("cls");
        op = menu();

  cout <<"MENU" << endl;
  cout <<"[1]=CADASTRAR" << endl;
  cout <<"[2]=BUSCAR" << endl;
  cout <<"[3]=EXCLUIR" << endl;
  cout <<"[4]=SAIR" << endl;
  cout <<"[5]=LISTAR" << endl;
  getchar();
  // estrutura switch
  switch(op){
  	case 1:
    inserir();
	break;
	case 2:
	    buscar();
	break;
	case 3:
	    excluir();
	     break;
	case 4:
	    exit(0);
        break;
    case 5 :
        listar();
        break;
 }
}while(op!=0);

 //*****************
//Funçao Inserir
//****************/
void inserir()
{
 system("cls");
    char cid[MAX];
	char bairro[MAX];
	char escola[MAX];
	int sala[MAX];
	char prof[MAX];
	char materia[MAX];
	int carghora[MAX];
	int op;
	do{
        printf("\nCidade");
        fgets(cid,sizeof(cid),stdin);
        printf("\nBairro");
        fgets(bairro,sizeof(bairro),stdin);
        printf("\nEscola");
        fgets(escola,sizeof(escola),stdin);
        printf("\nSala");
        scanf("%d",&sala);
        printf("\nProf");
        fgets(prof,sizeof(prof),stdin);
        printf("\nMateria");
        fgets(materia,sizeof(materia),stdin);
        printf("\nCarga Horaria");
        scanf("%d",&carghora);
        for(int i=0;i < MAX ;++i)
        {
           if (cadastrar[i].ativo==0)
           strcpy(cadastrar[i].cid,cid);
           strcpy(cadastrar[i].bairro,bairro);
           strcpy(cadastrar[i].escola,escola);
           cadastrar[i].sala[0] = sala[0];
           strcpy(cadastrar[i].prof,prof);
           strcpy(cadastrar[i].materia,materia);
           cadastrar[i].carghora[1] = carghora[1];
           break;

        }
        printf("1- Continuar");
        printf("2- Sair");
        scanf("%d",&op);
	}while(op!=0);
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Você está criando vários vetores de inteiros, como em "int sala[MAX];", acho que você quer na verdade um inteiro para armazenar o número da sala né? Nesse caso, e nos outros, só tirar o [MAX], deixe apenas o "int sala;" que estará pronto. Acredito nisso pois na leitura dos inteiros você não está lendo vários, apenas 1.
  • Seu laço do-while sai quando digita 0, e não 2 como nas instruções na função inserir(), ou 4 no main() rs.
  • Não existe um vetor de struct cadastrar chamado de cadastrar, acho que é aqui que deu erro de sintaxe inclusive.
  • A função main() está faltando um } no final dela, e retornar um inteiro.
  • Voltando na função inserir, esse laço for, de 0 a MAX, só é executado uma única vez, pois tem um break no final dele, então nem precisa do laço.
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Organizando seu código, poderia ficar mais ou menos assim: 

#include <iostream>

// Adapta alguns comandos de acordo com o sistema operacional
#if defined(_WIN32)
#define limparTela system("cls")
#define esperar system("pause")
#elif defined(__linux__)
#define limparTela system("clear")
#define esperar system("read foo")
#endif

using namespace std;

typedef struct {
    string cidade;
    string bairro;
    string escola;
    string sala;
    string professor;
    string materia;
    int cargaHoraria;
    bool ativo;
} Registro_t;

typedef struct {
    string nome;
    string periodo;
    string cidade;
    string bairro;
    int serie;
} Aluno_t;

int menu();

int inserir(Registro_t registros[], int quantidade, int posicao);

void listar(Registro_t registros[], int quantidade);

void buscar(Registro_t registros[], int quantidade);

void excluir(Registro_t registros[], int quantidade);

int main() {
    const int MAXIMO = 100;         // Tamanho máximo do vetor

    int opcao = 0;                  // Opção do menu
    int posicaoInsercao = 0;        // Posição onde deve ser inserido o novo registro

    Registro_t registros[MAXIMO];   // Vetor de dados

    do {
        opcao = menu();

        switch (opcao) {
            case 0:
                break;
            case 1:
                posicaoInsercao = inserir(registros, MAXIMO, posicaoInsercao);
                break;
            case 2:
                buscar(registros, MAXIMO);
                break;
            case 3:
                listar(registros, posicaoInsercao);
                break;
            case 4:
                excluir(registros, MAXIMO);
                break;
            default:
                cerr << "[ E ]: Verificar a função de menu, ela retornou algo que não devia. \n";
                esperar;
                break;
        }
    } while (opcao != 0);

    return EXIT_SUCCESS;
}

/**
 * Menu principal.
 *
 * @return Opção devidamente validada.
 */
int menu() {
    int opcao = 0;

    do {
        limparTela;
        cout << "MENU" << "\n"
             << "[ 1 ] - CADASTRAR" << "\n"
             << "[ 2 ] - BUSCAR" << "\n"
             << "[ 3 ] - LISTAR" << "\n"
             << "[ 4 ] - EXCLUIR" << "\n"
             << "[ 0 ] - SAIR" << "\n"
             << "> ";
        cin >> opcao;
    } while (opcao < 0 || opcao > 4);

    return opcao;
}

/**
 * Adiciona um novo registro no vetor.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 * @param posicao    Posição onde deve ser inserido.
 *
 * @return Posição da próxima inserção.
 */
int inserir(Registro_t registros[], int quantidade, int posicao) {
    if (posicao >= quantidade) {
        cerr << "[ E ]: Não tem espaço no vetor para mais inserções. \n";
        return posicao;
    }

    Registro_t registro;
    cin.ignore();

    limparTela;
    cout << "INSERIR \n";
    cout << "Cidade: ";
    getline(cin, registro.cidade);
    cout << "Bairro: ";
    getline(cin, registro.bairro);
    cout << "Escola: ";
    getline(cin, registro.escola);
    cout << "Sala: ";
    getline(cin, registro.sala);
    cout << "Professor: ";
    getline(cin, registro.professor);
    cout << "Materia: ";
    getline(cin, registro.materia);
    cout << "Carga Horaria: ";
    cin >> registro.cargaHoraria;
    registro.ativo = true;

    registros[posicao] = registro;
    posicao += 1;

    cout << "[ I ]: Registro adicionado. \n";
    esperar;
    return posicao;
}

/**
 * Lista todos os registros.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Quantidade de elementos adicionados.
 */
void listar(Registro_t registros[], int quantidade) {
    limparTela;
    cout << "LISTAR \n"
         << "=-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= \n";

    if (quantidade > 0) {
        for (int i = 0; i < quantidade; ++i) {
            cout << "---------- \n";
            cout << "       Cidade: " << registros[i].cidade << "\n";
            cout << "       Bairro: " << registros[i].bairro << "\n";
            cout << "       Escola: " << registros[i].escola << "\n";
            cout << "         Sala: " << registros[i].sala << "\n";
            cout << "    Professor: " << registros[i].professor << "\n";
            cout << "      Matéria: " << registros[i].materia << "\n";
            cout << "Carga Horária: " << registros[i].cargaHoraria << "\n";
            cout << "        Ativo: " << registros[i].ativo << "\n";
            cout << "---------- \n";
        }
    } else {
        cout << "[ I ]: Nenhum registro adicionado. \n";
    }

    cout << "=-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= \n";
    esperar;
}

/**
 * Realiza a busca serguindo algum critério.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 */
void buscar(Registro_t registros[], int quantidade) {}

/**
 * Exclui o registro do vetor.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 */
void excluir(Registro_t registros[], int quantidade) {}

Falta terminar algumas funções, mas a partir daí já é por sua conta.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, AdrianoSiqueira disse:

Organizando seu código, poderia ficar mais ou menos assim: 


#include <iostream>

// Adapta alguns comandos de acordo com o sistema operacional
#if defined(_WIN32)
#define limparTela system("cls")
#define esperar system("pause")
#elif defined(__linux__)
#define limparTela system("clear")
#define esperar system("read foo")
#endif

using namespace std;

typedef struct {
    string cidade;
    string bairro;
    string escola;
    string sala;
    string professor;
    string materia;
    int cargaHoraria;
    bool ativo;
} Registro_t;

typedef struct {
    string nome;
    string periodo;
    string cidade;
    string bairro;
    int serie;
} Aluno_t;

int menu();

int inserir(Registro_t registros[], int quantidade, int posicao);

void listar(Registro_t registros[], int quantidade);

void buscar(Registro_t registros[], int quantidade);

void excluir(Registro_t registros[], int quantidade);

int main() {
    const int MAXIMO = 100;         // Tamanho máximo do vetor

    int opcao = 0;                  // Opção do menu
    int posicaoInsercao = 0;        // Posição onde deve ser inserido o novo registro

    Registro_t registros[MAXIMO];   // Vetor de dados

    do {
        opcao = menu();

        switch (opcao) {
            case 0:
                break;
            case 1:
                posicaoInsercao = inserir(registros, MAXIMO, posicaoInsercao);
                break;
            case 2:
                buscar(registros, MAXIMO);
                break;
            case 3:
                listar(registros, posicaoInsercao);
                break;
            case 4:
                excluir(registros, MAXIMO);
                break;
            default:
                cerr << "[ E ]: Verificar a função de menu, ela retornou algo que não devia. \n";
                esperar;
                break;
        }
    } while (opcao != 0);

    return EXIT_SUCCESS;
}

/**
 * Menu principal.
 *
 * @return Opção devidamente validada.
 */
int menu() {
    int opcao = 0;

    do {
        limparTela;
        cout << "MENU" << "\n"
             << "[ 1 ] - CADASTRAR" << "\n"
             << "[ 2 ] - BUSCAR" << "\n"
             << "[ 3 ] - LISTAR" << "\n"
             << "[ 4 ] - EXCLUIR" << "\n"
             << "[ 0 ] - SAIR" << "\n"
             << "> ";
        cin >> opcao;
    } while (opcao < 0 || opcao > 4);

    return opcao;
}

/**
 * Adiciona um novo registro no vetor.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 * @param posicao    Posição onde deve ser inserido.
 *
 * @return Posição da próxima inserção.
 */
int inserir(Registro_t registros[], int quantidade, int posicao) {
    if (posicao >= quantidade) {
        cerr << "[ E ]: Não tem espaço no vetor para mais inserções. \n";
        return posicao;
    }

    Registro_t registro;
    cin.ignore();

    limparTela;
    cout << "INSERIR \n";
    cout << "Cidade: ";
    getline(cin, registro.cidade);
    cout << "Bairro: ";
    getline(cin, registro.bairro);
    cout << "Escola: ";
    getline(cin, registro.escola);
    cout << "Sala: ";
    getline(cin, registro.sala);
    cout << "Professor: ";
    getline(cin, registro.professor);
    cout << "Materia: ";
    getline(cin, registro.materia);
    cout << "Carga Horaria: ";
    cin >> registro.cargaHoraria;
    registro.ativo = true;

    registros[posicao] = registro;
    posicao += 1;

    cout << "[ I ]: Registro adicionado. \n";
    esperar;
    return posicao;
}

/**
 * Lista todos os registros.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Quantidade de elementos adicionados.
 */
void listar(Registro_t registros[], int quantidade) {
    limparTela;
    cout << "LISTAR \n"
         << "=-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= \n";

    if (quantidade > 0) {
        for (int i = 0; i < quantidade; ++i) {
            cout << "---------- \n";
            cout << "       Cidade: " << registros[i].cidade << "\n";
            cout << "       Bairro: " << registros[i].bairro << "\n";
            cout << "       Escola: " << registros[i].escola << "\n";
            cout << "         Sala: " << registros[i].sala << "\n";
            cout << "    Professor: " << registros[i].professor << "\n";
            cout << "      Matéria: " << registros[i].materia << "\n";
            cout << "Carga Horária: " << registros[i].cargaHoraria << "\n";
            cout << "        Ativo: " << registros[i].ativo << "\n";
            cout << "---------- \n";
        }
    } else {
        cout << "[ I ]: Nenhum registro adicionado. \n";
    }

    cout << "=-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= =-= \n";
    esperar;
}

/**
 * Realiza a busca serguindo algum critério.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 */
void buscar(Registro_t registros[], int quantidade) {}

/**
 * Exclui o registro do vetor.
 *
 * @param registros  Vetor de dados.
 * @param quantidade Tamanho do vetor.
 */
void excluir(Registro_t registros[], int quantidade) {}

Falta terminar algumas funções, mas a partir daí já é por sua conta.

 

adicionado 2 minutos depois

@AdrianoSiqueira adriano melhorou muito com essa organização mas não entendi do porque "registro_t registro "?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...