Ciao, tramite un ciclo for devo far sì che se inserisco 1, 2, 3 e poi di nuovo 1 mi dice errore e mi fa reinserire il 4 dato senza iniziare tutto da capo. Questo è il ciclo e da un po' di errori. Come posso sistemarlo?
http://pastebin.com/UrSCSpAD
Ciao, tramite un ciclo for devo far sì che se inserisco 1, 2, 3 e poi di nuovo 1 mi dice errore e mi fa reinserire il 4 dato senza iniziare tutto da capo. Questo è il ciclo e da un po' di errori. Come posso sistemarlo?
http://pastebin.com/UrSCSpAD
Attento, devi scorrere solo gli elementi che hai già inserito e ti interessa solo il caso trovato/non trovato.
Concettualmente puoi fare una cosa del genere.
Sarebbe più efficiente tenere una lista ordinata e tentare di fare un inserimento ordinato su questa lista, tuttavia se si tratta di pochi elementi il gioco non vale la candela, complichi il codice per nulla e il caso pessimo è lo stesso.codice:type dati[N]; for(int i = 0; i < N; ++i) { type tmp; //leggi in tmp boolean found = false; //scorro gli elementi precedenti per vedere se ce n'è uno uguale //se c'è interrompo il ciclo for(int j = 0; j < i && !found; j++) { found = dati[j] == tmp; } if(found) { cout << messaggio_errore; //torno allìiterazione precedente --i; } }
Se non hai capito quest'ultima frase ignorala pure che non è una cosa essenziale, era solo per fare un'annotazione.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Non capisco a cosa serva quel "type tmp", potresti spiegarmi?
Ah, mi sono dimenticato l'inserimento lol
Volendo puoi anche non usarla e leggere direttamente in dati[i]codice:type dati[N]; for(int i = 0; i < N; ++i) { type tmp; //leggi in tmp boolean found = false; //scorro gli elementi precedenti per vedere se ce n'è uno uguale //se c'è interrompo il ciclo for(int j = 0; j < i && !found; j++) { found = dati[j] == tmp; } if(found) { cout << messaggio_errore; //torno allìiterazione precedente --i; } else { dati[i] = tmp; } }
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares