Newsgroup: it.comp.lang.c++
Titolo: Come suggeritomi ho convertito a classi

il vecchio programma che ho postato l'ho riconvertito a classi e con l'uso
di oggetti e controlli migliore, visto che sono arrivato a meta' del secondo
libro di bruce (think in c++) finalmente sto incominciando a vedere tutti i
controlli di errore e tutti i membri delle classi standard.
vediamo un po come lo valutate ... e se avete consigli suggerimenti da
darmi.
ciao
--------------code----------------
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class Lotto
{
 int num[6];
 public:
 Lotto(int a=0,int b=0,int c=0,int d=0,int e=0,int f=0)
 {
  setLotto(a,b,c,d,e,f);
 }
 void setLotto(int a=0,int b=0,int c=0,int d=0,int e=0,int f=0)
 {
  num[0]=a;num[1]=b;num[2]=c;
  num[3]=d;num[4]=e;num[5]=f;
 }
 ~Lotto(){};
 void ceckalldiff();
 bool is_1_zeero();
 bool ceckboundary(int,int);
 unsigned int match(Lotto&);
 friend std::istream& operator>>(std::istream&,Lotto&);
 friend std::ostream& operator<<(std::ostream&,const Lotto&);
};
unsigned int Lotto::match(Lotto&o)
{
 int find=0;
 for (int j=0;j<6;j++)
 for (int y=0;y<6;y++)
 {
  if (this->num[j] > o.num[y]) y++;
  else if (this->num[j] < o.num[y]) j++;
  if (this->num[j] == o.num[y]) find++;
 }
 return find;
}
bool Lotto::ceckboundary(int lo,int hi)
{
 for (int i=0;i<6;i++)
 if (num[i] < lo || num[i] > hi) return false;
 return true;
}
bool Lotto::is_1_zeero()
{
 for (int i=0;i<6;i++)
 if (num[i] == 0) return true;
 return false;
}
void Lotto::ceckalldiff()
{
 for (int i = 0; i < 5; i++)
 for (int j = i+1; j < 6; j++)
 if (num[i] == num[j]) {setLotto(); break;}
}
std::istream& operator >> (std::istream &in,Lotto& o)
{
 for (int i=0;i<6;i++) in >> o.num[i];
 return in;
}
std::ostream& operator << (std::ostream &out,const Lotto& o)
{
 for (int i=0;i<6;i++) out << " " << o.num[i];
 return out;
}
int main(int, char *[])
{
 vector<Lotto> giocata(100);
 ifstream in("enalotto.csv",ios::in);
 if (in.rdstate()){cerr << "Non trovato enalotto.csv file !" <<
endl;exit(EXIT_FAILURE);}
 in.exceptions(ios::badbit|ios::failbit);
 while (!in.eof())
 {
  try
  {
   Lotto lettura;
   in >> lettura;
   if (!lettura.ceckboundary(1,90) || lettura.is_1_zeero()) continue;
   else giocata.push_back(lettura);
  }
  catch (ios::failure&)
  {
   int stat = in.exceptions();
   if (stat & ios::badbit) exit(EXIT_FAILURE);
   if (stat & ios::failbit) {in.clear();in.ignore(100,'\n');}
   else throw;
  }
 }
 in.close();
 if (!giocata.size()) {cerr << "File enalotto.csv vuoto o corrotto !" <<
endl;exit(EXIT_FAILURE);}
 Lotto estrazione;
 cin.exceptions(ios::badbit|ios::failbit);
 while(estrazione.is_1_zeero())
 {
  cout << "Inserire i numeri dell'estrazione nel formato : n n n n n n ,"
    " e devono essere compresi tra 1 e 90\n" << endl;
  try
  {
   cin >> estrazione;
   estrazione.ceckalldiff();
  }
  catch (ios::failure&)
  {
   int stat = cin.exceptions();
   if (stat & ios::badbit) exit(EXIT_FAILURE);
   if (stat & ios::failbit) {cout << endl;cin.clear();cin.ignore(100);}
   else throw;
  }
 }
 cout << "\n\n";
 int trovato = 0;
 for (unsigned int i=0;i<giocata.size();i++)
 {
  unsigned int find=giocata[i].match(estrazione);
  if (find == 3) {cout << "Terno nella giocata : \t"; trovato++;}
  if (find == 4) {cout << "Quaterna nella giocata : \t"; trovato++;}
  if (find > 4) {cout << "Bingo siamo miliardari nella giocata : \t";
trovato++;}
  if (find > 2) cout << giocata[i] << "\n\n" << endl;
 }
 if (trovato == 0) cout << "Mi spiace ritenta la fortuna alla prossima
estrazione !!!\n\n";
 cout << "Finita la computazione !\n\n" << endl;
 system("PAUSE");
 return 0;
}

  }
vi chiedo aiuto in questa parte perche' ieri l'ho scritto di getto ed oggi
l'ho testato ... ma stranamente (mi sono dimenticato di configurare il
carattere di fine lettura a ';' invece di ' ', ma questa e' un'altra storia)
io setto che l'inputt deve buttare delle eccezioni solo al badbit ed al
failbit, il punto e' che quando gli capita l'errore di conversione getta
invece tutte e 2 le eccezioni sia failbit che badbit, perche' ???
io poi ho trovato l'unico modo di leggere le eccezioni lanciate con il
metodo di confronto binario come si vede dell'area di catch, ma questo fatto
che la mancata della riuscita della conversione in lettura mi lancia anche
il badbit mi fa terminare il programma, cosi' non dovrebbe essere ... come
mai sto fatto strano ??? qualcuno sa dirmelo ???
ah sempre su sto fatto ho visto che se imposto l'eccezione solo su badbit il
programma legge bene (anche se fallisce le conversioni) non mi lancia il
badbit !!!
sto veramente impazzendo su sto problema aiuto !!!
heellllllppppppp grazie se mi aiutate mi sento tanto nella merda ...

 ha scritto nel messaggio
news:bib82r$g5s$1...@news.ngi.it...
scusate ma nessuno riesce ad aiutarmi all'ora ??? mi sento un po' messo in
disparte :-/
ciao