Ciao a tutti,
per un progetto scolastico sto scrivendo un programma in C++ ad oggetti (nozioni base) per l’organizzazione e gestione di prodotti in un ipotetico magazzino.
Sto riscontrando grosse difficoltà con la definizione del controllo input. Per rendere la scrittura più maneggevole ne ho fatto una classe a parte e creato il file .h
La struttura indicativa da cui ci è stato indicato di partire è questa
codice:
template <class T>
void Inserimento(T& a){
std::cin.clear();;
std::cin>>a;
if(std::cin.fail()){
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
Inserimento(a);
}
}
ma è ovviamente molto generica e per nulla efficiente.
Nel complesso del progetto, ho individuato tre diverse casistiche di input che devo verificare:
- int per numeri
- char per “scelta rapida” (y/n)
- string per controllo sui prodotti del catalogo
Nello specifico, ho pensato di sviluppare gli specifici controlli in base alla tipologia, così:
codice:
template <typename T>
void Inserimento(){
T ins;
std::locale loc;
std::string insStr, insInt;
bool check=false;
do{
std::cin.clear();
std::cin>>ins;
//controllo int
if(std::is_same<T, int>()){
insInt = ins;
for(int i=0; i<insInt.length(); i++){
if(isdigit(insInt[i])) {
check=true;
if(check != true){
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
std::cin.clear();
check=false;
break;}
}
}
}
//controllo char
else if(std::is_same<T, char>()){
if(std::isalpha(ins,loc)){
check=true;}
else{
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
std::cin.clear();}
}
//controllo string
if(std::is_same<T, std::string>()){
insStr = ins;
for(int i=0; i<insStr.length(); i++){
if(isalpha(insStr[i])) {
check=true;
if(check!= true){
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
std::cin.clear();
check=false;
break;}
}
}
}
else{
std::cout << "Inserimento non valido, riprovare -> \tScelta selezionata: ";
std::cin.clear();
check=false;
}
}while(check==false);
}
E’ una struttura che ha senso? Si può rendere più lineare? Come posso migliorarlo?
Grazie a chiunque abbia voglia di darmi un consiglio