tinpro015b-les5 Invoer en Uitvoer
Standaard “Streams” #include <iostream> using namespace std; iostream >> invoeroperator << uitvoeroperator cin standaard-invoerstream cout standaard-uitvoerstream cerr standaard-fout-uitvoerstream clog standaard-fout-uitvoerstream gebufferd
Standaard “Streams” type van cin is een klasse istream type van cout,cerr,clog is een klasse ostream afgeleide klasse van de basisklasse ios
Uitvoer uitvoer heet insertie bij C++ Alles voor cout geldt ook voor files << operator uitvoer (links-associatief) cout << ch << ‘=‘ is identiek aan (cout.operator<<(ch)).operator<<(‘=‘)
Ingebouwde inserter-types Het type wat volgt op cout << wordt inserter-type genoemd char , short , int , long ,const char* , string, float,double,long double, void* (hex-adres) Naast << operator de ostream lidfuncties put en write (primitieve uitvoer) cout.put(ch) ( 1 karakter) cout.write(a,n) ( n karakters schrijven vanaf adres a
Manipulatoren voor uitvoer #include <iomanip> cout << f cout << setw(15) << setprecision(10) << .. veldbreedte = 15 kar ( totaal aantal kar) precisie = 10 kar ( aantal kar na komma)
Manipulatoren voor uitvoer manipulatoren uitvoer: setw(n),setfil(ch),dec,hex,oct,flush,endl,ends, setprecision(n),boolalpha,noboolapha, showbase,showpoint,showpoint,uppercase, nouppercase,left,right,internal,fixed,scientific cout << hex << i <<‘ ’ << j ( i en j hexadecimaal afdrukken) cout << setw(15) <<i << j ( alleen voor i wordt de veldbreedte 15)
Invoer invoer heet extractie bij C++ Alles voor cin geldt ook voor files >> operator invoer (links-associatief) cin >> i >> j is identiek aan (cin.operator>>(i)).operator>>(j)
Invoer primitieve invoer: cin.get(ch) of ch= cin.get() (lees 1 karakter) cin.putback(ch) (kar terug in buffer) cin.get(str,40) (leest 39 karakters) char str[40] ; cin.read(str,40) (leest 40 karakters) string s; cin >>s (leest 1e string in) getline(cin,s) (leest hele regel in) char str[30]; cin.getline(str,30); cout << str << endl; ( C-stijl , leest 29 karakters)
Ingebouwde extractor-types De volgende ingebouwde extractor-types: Char , short , int , long char* ,string , float , double , long double , bool
Manipulatoren voor invoer De volgende invoer-manipulatoren: setw(n) , setfill(ch) , noskipws , dec ,hex ,oct, boolalpha, noboolalpha char ch; cin >> ch; (alle spaties worden weggelezen) char >> noskipws >> ch; ( ook spaties worden aan ch toegekend)
Files en streams Voor invoer files gebruiken we ifstream (afgeleide klasse van istream) Voor uitvoer files gebruiken we ofstream (afgeleide klasse van ostream)
Files en Streams ios istream ostream istringstream ifstream iostream ofstream ostringstream fstream stringstream
Files en Streams Kopieer file aa naar file bb int main() { char ch; int n=0; ifstream ff(“aa”) ; if (!ff) { cout << “kan file aa niet openen.\n”; return 1} ofstream gg(“bb”); if (!gg) { cout << “kan file bb niet openen.\n”; return 1} while (ff.get(ch)) { gg.put(ch); n++ } cout << n << “karakters gecopieerd\n”; return 0; }
Files en Streams Het verband tussen de stream ff en de file aa wordt gelegd door openen ifstream ff(“aa”) de constructor van ifstream Bij tekstfiles worden 9 bytes gelezen <cr> Bij binaire files worden 10 bytes gelezen <cr><lf> Bij binaire files kan gcount() het aantal gelezen bytes opvragen
Openen en sluiten Streams ifstream ff // declaratie zonder openen ff.open(“aa”) // open ff voor file aa ff.close() // sluit ff ff.open(“aaa”) // open ff voor file aaa tweede argument van lidfunctie open: fstream ff(“aa”. ios:: in | ios::out | ios::binary | ios::trunc | ios::app | ios::ate); de argumenten we combineren met | ( bit of)
Random Access Bij binaire mode kun je een file random benaderen Identiek als bij een array Je kunt een willekeurige positie aanwijzen (random access) Bij tekstfiles begin je aan het begin van de file tot het einde toe ( sequential access) fseekg(i) wijst i-de byte aan van stream f bij lezen ( i = type long) fseekp(i) wijst i-de byte aan van stream f bij schrijven ( i = type long)
Random Access tweede argument seekg of seekp: f.seekg(offset, ios::beg); f.seekg(offset, ios::cur); f.seekg(offset, ios::end); long posget = f.tellg(); posput = f.tellp(); leest huidige positie uit
Statusbits ios bevat statusbits, o.a. ios::failbit , ios::eofbit de overeenkomstige functies heten fail() , eof() fail() is true als er iets mis gegaan is de functie f.clear() zet alle statusbits op 0 if (!ff) kan vervangen worden door if ( ff.fail()) maar niet door if (ff.eof()) wat niet gebruikt kan worden voor het testen van de aanwezigheid van de file
Huiswerk les 5 Maak de opgaven 8.1, 8.3, 8.8 uit C++ boek Bestudeer Hfdst 9 uit C++boek