Problema switch-case

di il
2 risposte

Problema switch-case

Salve a tutti!
All'interno di questo progetto si ha la possibilità di creare un Archivio di Studenti ed interagirci tramite un menù appositamente creato nel Main, ma è quest'ultimo che mi crea problemi. Ho compilato separatamente Archivio.cpp e Archivio.h e quando provo a compilare MainArchivio.cpp mi esce lo stesso errore per tutte le righe dei case:

expected primary-expression before ' ' token

ecco i codici:

Archivio.h : Definizioni

#ifndef _ARCHIVIO_H
#define _ARCHIVIO_H

#include <iostream>
#include <cstring>

using namespace std;

const int DIMS=30;

int num_entry=0;

typedef struct Studente {
        int matricola;
        char nome[DIMS];
        int numeroEsami;
        };

typedef Studente * Archivio;

Archivio crea_archivio(Archivio, int);
Studente crea_record(Studente);
Archivio inserisci_record(Archivio, int);
int ricerca_record (const Archivio, const int);
void stampa_dati (const Archivio, const int);
void stampa_archivio (const Archivio);
void distruggi_archivio(Archivio);
#endif
Archivio.cpp : Funzioni

#include "Archivio.h"

Archivio crea_archivio(Archivio A, int n){
         A = new Studente[n];
         cout << "\nCreato nuovo Archivio Studenti di capienza " << n <<".";
         return A;                
         }
         
Studente crea_record(Studente S){
         cout << "\nMatricola: ";
         cin >> S.matricola;
         cout << "\nNome (max30 caratteri): ";
         cin >> S.nome;
         cout << "\nNumero Esami: ";
         cin >> S.numeroEsami;
         return S;
         }

Archivio inserisci_record(Archivio A, int n){
         if (num_entry==n){
            cout<<"\nERRORE! Archivio pieno. Terminazione programma...\n";
            exit(0);
            }
         cout << "\nSto creando lo Studente...";
         Studente S;
         crea_record(S);
         A[num_entry].matricola=S.matricola;
         strcpy(A[num_entry].nome,S.nome);
         A[num_entry].numeroEsami=S.numeroEsami;
         cout << "\nStudente inserito con successo nell'Archivio.";
         num_entry++;
         }

int ricerca_record (const Archivio A/*, const int num_entry*/){
               if (num_entry==0){
                  cout<<"\nERRORE! Archivio vuoto. Terminazione programma...\n";
                  exit(0);
               }
               bool trovato=false;
               int target;
               int i=0;
               cout << "\nMatricola da ricercare: ";
               cin >> target;
               while (!trovato && i<num_entry){
                     if (A[i].matricola==target)
                     return i++;
                     else (i++);
                     }
               if (!trovato)
               return 0;
               }

void stampa_dati (const Archivio A, const int p){
     cout << "\nDati Studente posizione" << p+1 << ":\n";
     cout << A[p].matricola << "\t" << A[p].nome << "\t" << A[p].numeroEsami;     
     }
     
void stampa_archivio (const Archivio A){
     cout << "\nStampa dati archivio...";
     for (int i=0; i<num_entry; i++)
     stampa_dati(A,i);
     }
     
void distruggi_archivio(Archivio A){
     delete [] A;
     A = NULL;
     cout << "\nArchivio distrutto con successo.\n";
     }
MainArchivio.cpp : Main

#include <cstdlib>
#include <iostream>
#include "Archivio.h"

using namespace std;

int main(int argc, char *argv[]){
    int scelta,n,position,sposition,esci=0;
    Archivio A;
    
    do {

	   do {
	// stampa il menu' delle operazioni previste
	
	   cout<<"\n---------Menu Archivio---------\n";
	   cout<<"\n1) Creazione dell’archivio\n  ";
       cout<<"\n2) Inserimento di uno studente  nell’archivio\n  ";
	   cout<<"\n3) Ricerca di uno studente nell’archivio\n ";
       cout<<"\n4) Stampa dell’archivio\n ";
       cout<<"\n5) Stampa dati studente\n ";
	   cout<<"\n6) Distruzione dell’archivio\n ";
	   cout<<"\n7) Fine\n ";
	   cout<<"\n Inserisci una opzione: ";
	   cin>>scelta;
	   cout << "\n";
	} while ((scelta<1)||(scelta>7));
	
	    switch (scelta) {
	      case (1):
               cout << "\nCapienza Archivio?: ";
               cin >> n;
               crea_archivio(Archivio A, int n);break;
          case (2): inserisci_record(Archivio A, int n);break;
	      case (3): 
               position=ricerca_record(const Archivio A/*, const int num_entry*/);
               if (position==0)
               cout << "\nElemento non presente nell'Archivio.";
               else cout << "\nElemento presente in posizione" << position <<".";
               break;
          case (4): stampa_archivio (const Archivio A);break;
          case (5): 
               cout << "\nPosizione Studente da stampare: ";
               cin >> sposition;
               sposition--;               
               stampa_dati (const Archivio A, const int sposition);break;
		  case (6): distruggi_archivio(Archivio A);break;
          case (7): esci=1;break;
		  default: cout << "\n opzione errata!";
	   }
       cout << "\n";
       system("PAUSE");
       system("CLS");
	} while (!esci);
	return 0;
    system("PAUSE");
    return EXIT_SUCCESS;
}
gli errori sono i seguenti (tutti in MainArchivio.cpp)

In function `int main(int, char**)':
78 expected primary-expression before "A"
78 expected primary-expression before "int"
79 expected primary-expression before "A"
79 expected primary-expression before "int"
81 expected primary-expression before "const"
86 expected primary-expression before "const"
91 expected primary-expression before "const"
91 expected primary-expression before "const"
92 expected primary-expression before "A"
Makefile.win [Build Error] [MainArchivio.o] Error 1

In cosa sto sbagliando nell'usare lo switch/case? come faccio a riparare il tutto?

Thank you in advance

2 Risposte

  • Re: Problema switch-case

    Ti sei dimenticato di mettere { e } in tutte le case e poi non devi mettere l'opzione tra parentesi.
    esempio di case :
    int a
    cin >> a;
    switch (a) {
    case 1: {
    // qui metti il tuo codice per l'opzione 1
    return 0; // puoi fargli tornare il valore che vuoi
    break;
    }
    case 2: {
    // qui metti il tuo codice per l'opzione 2
    return 0; // puoi fargli tornare il valore che vuoi
    break;
    }
    usa la struttura in rosso per tutte le altre opzioni.
  • Re: Problema switch-case

    Scusa mi ero dimenticato che oltre le case (vedi risposta precednte)
    devi aggiungere anche la condizione di default la devi mettere come ultima opzione.
    default : // qui metti il codice che vuoi
    break;
Devi accedere o registrarti per scrivere nel forum
2 risposte