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

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando