Nel main ho creato un modulo di supporto con una funzione Copia che prende dal buffer input una stringa la ricopia in s1 e la inserisce in un oggetto Automobile o Moto dinamicamente però mi si blocca quando inserisco la marca. Gli altri punti del main sembrano funzionare ma non potendo inserire gli oggetti nel vettore non posso saperlo con certezza. Come mai succede questo? Mi date una mano?
Vi metto sotto le parti principali del programma se vi serve altro ve lo posto.
Main.cpp
Supportolib.h
Supportofun.cpp
Errorelib.h
Errorefun.cpp
C++:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include "Veicololib.h"
#include "Automobilelib.h"
#include "Motolib.h"
#include "Garagelib.h"
#include "Errorelib.h"
#include "Supportolib.h"
using namespace std;
using namespace Parcheggio;
int main(int argc, char** argv) {
int opzione;
Garage G;
buffer b;
do{
system("cls");
Stampa_Menu();
cin>>opzione;
switch(opzione){
case(1):
cout<<"\n Inserisci un Automobile o una Motocicletta [A/M] : ";
char risp;
cin>>risp;
if(!G.Full()){
if(risp=='A'){
Str s1, s2;
cin.ignore();
cout<<"\n Inserisci la marca dell'Automobile: ";
Copia(b, s1);
cout<<"\n Inserisci l'alimentazione dell'Automobile: ";
Copia(b, s2);
try{
G.Immetti(new Automobile("Automobile", s1, s2));
}
catch(Errore e){
cout<<e.what()<<endl;
}
}else if(risp=='M'){
Str s1, s2;
cin.ignore();
cout<<"\n Inserisci la marca della Motocicletta: ";
Copia(b, s1);
cout<<"\n Inserisci il tipo di Motocilcetta: ";
Copia(b, s2);
try{
G.Immetti(new Moto("Motocicletta", s1, s2));
}
catch(Errore e){
cout<<e.what()<<endl;
}
}
}else{
cout<<"\n Il Garage è pieno \n";
}
break;
case(2):
cin.ignore();
cout<<"\n Inserisci la posizione del veicolo da estrarre: ";
if(!G.Empty()){
int pos;
cin>>pos;
cin.ignore();
cout<<"\n Il veicolo estratto è :";
cout<<endl<<G.Estrai(pos)<<endl;
cout<<"\n il garage adesso è composto dai seguenti veicoli: ";
G.Stampa_Video();
}else{
cout<<"\n Il garage è vuoto \n ";
}
break;
case(3):
cout<<"\n Lista dei veicoli presenti nel garage: ";
if(!G.Empty()){
G.Stampa_Video();
}else cout<<"\n Il garage è vuoto \n ";
break;
case(4):
cin.ignore();
cout<<"\n Inserisci il Percorso del file: ";
cin.getline(b, DIM-1, '\n');
try{
G.Stampa_File(b);
}catch(const char *b){
cout<<b<<endl;
}
break;
}
system("pause");
}while(opzione!=0);
return 0;
}
Supportolib.h
C++:
#ifndef SUPPORTOLIB_H
#define SUPPORTOLIB_H
#include "Veicololib.h"
namespace Parcheggio{
typedef char *Str;
void Stampa_Menu();
void Copia(char *, char *);
}
#endif
Supportofun.cpp
C++:
#include "Supportolib.h"
namespace Parcheggio{
void Stampa_Menu(){
cout<<"/***Benvenuti all'interno del garage**/\n\n";
cout<<"[0] Uscita \n";
cout<<"[1] Insersci un veicolo nel garage \n";
cout<<"[2] Estrai un veicolo dal garage \n";
cout<<"[3] Stampa a video la lista dei veicoli \n";
cout<<"[4] Stampa su file la lista dei veicoli \n";
cout<<"Premi il tasto per scegliere l'operazione da svolgere : ";
}
void Copia(char *buffer, char *s){
cin.getline(buffer, DIM-1, '\n');
delete [] s;
s=new char [strlen(buffer)+1];
strcpy(s, buffer);
strcpy(buffer, "");
cin.ignore();
}
}
Errorelib.h
C++:
#ifndef ERRORELIB_H
#define ERRORELIB_H
#include <cstring>
using namespace std;
namespace Parcheggio{
class Errore{
private :
char * error;
public:
Errore(char *E): error(E){};
const char *what() const;
};
}
#endif
Errorefun.cpp
C++:
#include "Errorelib.h"
namespace Parcheggio{
const char *Errore::what() const {
char stringa[]= "\n Errore! Il veicolo inserito non è valido: ";
char *msg= new char [strlen(error)+strlen(stringa)+1];
strcat(msg,stringa);
strcat(msg, stringa);
return msg;
}
}
Ultima modifica da un moderatore: