/* FILE: IOtest.cpp last change: 12-Mar-2001 * Si esemplifica come formattare l'output */ #include #include void usage(char *nome); main(int argc, char **argv) { if (argc < 2) // Devo avere almeno 1 argomento sulla linea di comando usage(argv[0]); // Esempio di utilizzo di fill e width cout << "========================================" << endl; cout << "Cambio il carattere di fill sullo stream cout." << endl; char c = cout.fill('_'); cout << "Il vecchio carattere era: '" << c << "'. Il nuovo e` _." << endl; cout << "Stampo un numero utilizzando 5 spazi: "; cout.width(5); cout << 2 << endl; cout << "Rimetto il vecchio carattere di fill sullo stream cout." << endl; cout.fill(c); cout << "Stampo un numero utilizzando 5 spazi: " << setw(5) << 2 << endl; // Esempio di utilizzo di precision, setf, unsetf cout << "========================================" << endl; cout << "Imposto a 5 il numero di cifre da stampare per un floating point." << endl; int oldp = cout.precision(5); cout << "31 / 3: " << 31.0 / 3.0 << endl; cout << "Setto il flag ios:fixed, avremo 5 cifre dopo il punto" << endl; cout.setf(ios::fixed); cout << "31 / 3: " << 31.0 / 3.0 << endl; cout.precision(oldp); cout << "Rimetto a " << oldp << " il numero di cifre per un floating point." << endl; cout << "31 / 3: " << 31.0 / 3.0 << endl; cout << "Resetto il flag ios:fixed, avremo 4 cifre dopo il punto" << endl; cout.unsetf(ios::fixed); cout << "31 / 3: " << 31.0 / 3.0 << endl; // Esempio di utilizzo di flags cout << "========================================" << endl; cout << "Setto il flag ios:showpoint, ios::showpos" << endl; unsigned long oldf = cout.flags(ios::showpoint|ios::showpos); cout << "0.5: " << 0.5 << endl; cout << "Resetto il flag ios:showpoint, ios::showpos" << endl; cout.flags(oldf); cout << "0.5: " << 0.5 << endl; // Apro il file in scrittura ofstream my_out(argv[1]); if (!my_out) { cerr << "Errore: non posso aprire il file " << argv[1] << " in scrittura." << endl; exit(-1); } // Scriviamo due interi nel nostro file cout << "========================================" << endl; int a = 28; int b = 10; cout << "La posizione corrente sul file e`: " << my_out.tellp() << endl; cout << "Scrivo " << a << " " << b << " nel file " << argv[1] << endl; my_out << a << endl << b << endl; cout << "La posizione corrente sul file e`: " << my_out.tellp() << endl; cout << "Sposto la posizione corrente indietro a 2." << endl; my_out.seekp(2, ios::beg); cout << "La posizione corrente sul file e`: " << my_out.tellp() << endl; cout << "Scrivo " << -b*10 << " nel file " << argv[1] << endl; my_out << -b*10 << endl; if (my_out.fail()) { cerr << "Arghhhhh: errore impervisto!" << endl; exit(-2); } cout << "La posizione corrente sul file e`: " << my_out.tellp() << endl; my_out.close(); // Apro il file in lettura ifstream my_inp(argv[1]); if (!my_inp) { cerr << "Errore: non posso aprire il file " << argv[1] << " in lettura." << endl; exit(-1); } int cntr = 0; int v; while(!my_inp.eof()) { my_inp >> v; if (!my_inp.fail()) cout << "Iterazione numero " << cntr++ << ". Dato letto: " << v << " Posizione corrente: " << my_inp.tellg() << endl; else cerr << "Ho un errore nella lettura dal file " << argv[1] << endl << "Ma vado avanti!" << endl; } // Provo a leggere ancora! my_inp >> v; // In questo caso avremo un errore char nomefile[] ="/nonesiste/pippo.txt"; // Non potra` aprire il file ofstream bad_out(nomefile); if (bad_out.bad()) // Stessa cosa di if (!bad_out) ... cerr << "Errore: non posso aprire il file " << nomefile << " in scrittura." << endl << "Ma vado avanti!" << endl; exit(0); } // Funzione che descrive la modalita` di funzionamento del programma. void usage(char *nome) { cerr << "Uso:\n\t"; cerr << nome << " file_name" << endl; cerr << "Dove:" << endl; cerr << "\tfile_name: nome del file su cui lavoreremo" << endl; exit(0); }