Kapitel 5. Strömmar. Utmatning

Relevanta dokument
Del6 Strömmar Ämnesområden denna föreläsning:

Strömmar och strängar

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Föreläsning 4: Filer och strömmar

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper

Kapitel 3. Synlighet. Kapitel 3 - Klassanvändning, operatorer och pekare. Synlighet

Det finns många flaggor till g++,

Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv

TDIU20 - Objektorienterad programmering i c++ - föreläsning 3

Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++

C++-programmets beståndsdelar

4. Standard-containers. Strömmar och filer

Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering

Programmeringsteknik med C och Matlab

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Tentamen EDAF30 Programmering i C++

Synlighet. Namespace Scope-operatorn Klasser Vänner

TDIU01 (725G67) - Programmering i C++, grundkurs

Kapitel 6 - Undantag

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

C++ - En introduktion

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

C++ Objektorientering - Klasser. Eric Elfving

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

grundläggande C++, funktioner m.m.

Föreläsning 13. In- och utmatning

Filhantering. Grunderna i filhantering. Uppbyggnad av filer. Data hierarkin. Filpekaren. Positionering i filer

TDIU01 - Programmering i C++, grundkurs

2D1387, Programsystemkonstruktion med C++ 01/02 1

Enkla datatyper minne

TDDC76 - Programmering och Datastrukturer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Programsystemkonstruktion med C++

TDIU01 - Programmering i C++, grundkurs

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Tentamen EDAF30 Programmering i C++

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Innehåll. 1 Algoritmer. 2 Strömmar och filer. 3 Iteratorer. 1 Söka, räkna. 2 Jämföra, genomlöpa. 3 Generera nya data. 4 Kopiera och flytta element

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Kapitel 4 - Mallar. Kapitel 4. Introduktion till mallar STL. 2D1387 Programsystemkonstruktion med C++ 1

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Tentamen EDAF30 Programmering i C++

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 2 september 2006

C++ Lektion Filhantering

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Strängar. Strängar (forts.)

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Programsystemkonstruktion med C++

1 Klasser och objektorientering Vad är objektorientering?

Minneshantering. Minneshantering. Minneshantering. Undvik pekare

*:85/ID200V C++ HT07. Föreläsning 8 Medlemspekare Undantagshantering Namnrymder

Föreläsning 1: Momstabellen i C++

Introduktionslaboration

Deklarera en struct som kan användas för att representera en rät linje

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Funktionens deklaration

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Övningar Dag 2 En första klass

6 In- och utmatning, strömmar

Tentamen EDAF30 Programmering i C++

Introduktionslaboration

SP:PROG3 HT12 Tenta

Introduktion till streams

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:

Ordlistor, filhantering och ut på webben. Linda Mannila

Övning från förra gången: readword

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Skizz till en enkel databas

Tentamen C++-programmering

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Tentamen *:85/2I4123 C

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

TDIU01 Programmering i C++

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

allokeras på stacken dynamiskt new delete

TDDC76 - Programmering och Datastrukturer

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Transkript:

Kapitel 5 Strömmar Kapitel 5 - Strömmar Utmatning med std::ostream och std::ostringstream Inmatning med std::istream och std::istringstream Överlagring av in- och utmatning Iteratorer för in- och utmatning med strömmar 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 2 Strömmar Exempel på strömmar: Utmatning #include <iostream> #include <iomanip> // innehåller std::cout // innehåller setw() std::cout << "Demo:" // utmatning av char * << std::setw(10) // sätt storlek på utmatning << 4711 // utmatning av int << std::endl; // radmatning std::cout << "Name\tPts\n" // rubriker << "Joe\t37\n" // '\t' är tabulatortecken << "Anna\t41\n"; // '\n' är radmatning Utmatning med std::cout, std::cerr, std::clog int i, j; std::cin >> i >> j; // hämta int från stdin 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 3 2D1387 Programsystemkonstruktion med C++ 1

Utmatning med cout, cerr Prefixet c står för character För utmatning används std::cout (skriver till stdout) För felutmatning och loggning använder man std::cerr resp. std::clog (skriver till stderr) Samtliga är globala objekt av typen std::ostream med överlagrad operator<< Utmatning med cout, cerr Den överlagrade operatorn << klarar samtliga inbyggda datatyper. std::string str = "C++"; const void *p = &str; char c = 'a'; std::cout << (int)c << " " // '97' (int) << 3.14 << " " // 3.14 (double) << str << " " // C++ (std::string) << str.c_str() << " " // C++ (const char *) << p << std::endl; // 0012FF60 (adress) std::cerr << "could not open file" // stderr << std::endl; 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 5 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 6 Formatväljare för utmatning Man kan variera formatet på sin utmatning: Utmatning till / inmatning från minne Om man vill skriva till / från minnet kan man använda stringstream som skriver till / från en STL-sträng double balance = 147.5371; // pengar på kontot std::cout.precision(5); // använd fem värdesiffror std::cout << "Balance: " // rubrik << std::setw(10) // tio siffrors fält << std::setfill('*') // fyll tomrum med * << balance // utskrift ger resultat: << std::endl; // Balance: ****147.54 #include <stringstream> std::ostringstream message; // mata till minne int i = 17; double d = 33.3; message << "Error: " << i // fyll med data << " is less than " << d; std::cerr << message.str() << std::endl; // skriv ut std::istringstream source("to be or not to be"); std::string str; source >> str; // ett ord i taget 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 7 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 8 2D1387 Programsystemkonstruktion med C++ 2

Inmatning med cin Inmatning Inmatning från std::cin För inmatning från stdin använder man cin Typen på argumentet till operator>> bestämmer hur indata tolkas // antag inmatning för ett bankkonto: // kalle qwerty 147.30 std::string user, passwd; double balance; std::cin >> user >> passwd >> balance; if(passwd!= "qwerty") std::cout << "wrong password" << std::endl; else std::cout << "balance: " << balance << std::endl; 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 10 Inmatning med cin För att förhindra att man skriver utanför avsett minne kan man använda formatväljare för cin: char buf[10]; // läs 9 tecken + '\0' i varje varv while(std::cin >> std::setw(sizeof buf) >> buf) do_something(buf); Varning: initieringsordning hos globala objekt Standarden säger inget om initieringsordningen hos objekt som ligger i olika översättningsenheter (.cpp-filer) Detta innebär att std::cout kan initieras efter dina globala objekt och statiska klassmedlemmar Programmet får då ett oväntat beteende Använd därför aldrig std::cout i konstruktorn för globala objekt 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 11 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 12 2D1387 Programsystemkonstruktion med C++ 3

Överlagring Inmatnings- och Överlagring av in- och När man vill överföra data från en ström till ett objekt överlagrar man operator>> När man vill skriva ut ett objekt till en ström överlagrar man operator<< 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 14 Överlagring av in- och Överlagring av in- och // i headerfilen: class A { public: int get_i() const { return i; } std::string get_s() const { return s; } void set_i(int j) { i = j; } void set_s(std::string t) { s = t; } private: int i; std::string s; }; // deklarationer std::ostream &operator<<(std::ostream &, const A &); std::istream &operator>>(std::istream &, A &); // i implementationsfilen: std::ostream & operator<<(std::ostream &o, const A &a) { return o << "{" << a.get_i() << ", " << a.get_s() << "}"; } std::istream & operator>>(std::istream &o, A &a) { int i; std::string s; o >> i >> s; a.set_i(i); a.set_s(s); return o; } A a; // skriv till objektet från stdin std::cin >> a; // skriv ut objektet till stdout std::cout << a << std::endl; // definition // definition 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 15 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 16 2D1387 Programsystemkonstruktion med C++ 4

Iteratorer In- och In- och utmatningsiteratorer STL-behållare kan man fylla direkt från en ström med en inmatnings-iterator, std::istream_iterator Man kan mata ut innehållet i en behållare till en ström med en utmatnings-iterator, std::ostream_iterator 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 18 In- och utmatningsiteratorer std::vector<int> v; // hämta från stdin tills EOF-indikator, lägg sist std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), // EOF std::back_inserter(v)); std::transform(v.begin(), // beräkna och skriv ut x % 10 v.end(), // x % y, y = 10 std::ostream_iterator<int>(std::cout, "\n"), std::bind2nd(std::modulus<int>(), 10)); Öppning Läsning Skrivning Accesstyper 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 19 2D1387 Programsystemkonstruktion med C++ 5

För att knyta en ström till en fil använder man en filström std::ifstream ger inmatning och tar ett filnamn som argument std::ofstream ger utmatning std::fstream ger en generell filström som klarar att både läsa och skriva #include <fstream> // ifstream, ofstream std::ifstream input("my_file.in"); // skapa infil std::ofstream output("my_file.out"); // skapa utfil // kontrollera att filerna gick att öppna if(!input) std::cout << "open failed for input file"; if(!output) std::cout << "open failed for output file"; std::vector<int> v; int i; input >> i; v.push_back(i); output << v.back() << std::endl; // hämta data // lägg i vektorn // skriv element 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 21 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 22 Man kan bestämma hur en fil ska öppnas (lägg till, skriv, läs) #include <iostream> #include <fstream> // ios_base // ofstream, fstream std::ofstream s1("result", std::ios_base::app); std::fstream s2("temp", std::ios_base::in std::ios_base::out); Olika åtkomsttyper: app - lägg till (append) ate - finn slutet (at end) binary - binär in - läs out - skriv trunc - töm fil (truncate) 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 23 2D1387 Programsystemkonstruktion med C++ Johnny Bigert 2002-2003 24 2D1387 Programsystemkonstruktion med C++ 6