Ir ao conteúdo

Posts recomendados

Postado

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
Postado
  • 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
Postado

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

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