Standardní vstup a výstup v C++

Jak pracovat s proudy

Vstup a výstup jsou nedílnou součástí komunikace programu s uživatelem. Vstupy a výstupy, se kterým se budeme dnes setkávat by pro vás neměly být vyloženě nic nového. Přesto je třeba tuto část bedlivě prostudovat, neboť nás bude provázet po celou dobu.

Každý programátor si nejprve potřebuje otestovat funkčnost svého programu, než jej spojí s uživatelským prostředím. K tomu mu poslouží standardní vstupy a výstupy. Dnes nebudeme rozebírat příklad jeden, ale dva.

Příklad 1: klávesnice a obrazovka

Nejčastěji se komunikuje pomocí klávesnice a obrazovky. Klávesnice bude náš vstup a obrazovka náš výstup. Budou to 2 základní proudy cout(obrazovka) a cin(klávesnice).

#include <iostream>
#include <string>

using namespace std;

int main(){

   cout << "Zadej prosim sve jmeno: ";
   string jmeno;
   cin >> jmeno;
   cout << "Vase jmeno je " << jmeno << endl;
   return 0;

}

Zadej prosim sve jmeno: Karel
Vase jmeno je Karel

Příklad 2: soubory

Někdy je třeba, aby data byla uložena mimo zdrojový kód. C++ umožnůje pracovat se soubory velice jednoduše. K tomu nám složí datový proud "ifstream".

#include <iostream>
#include <fstream>
#include <string>


using namespace std;

int main(){

   ofstream soubor1; // vystupni proud do souboru (zapis)
   soubor1.open("test.txt", ios::out);
   soubor1 << "Karel" << endl << "Mozdren" << endl << 22;
   soubor1.close();

   string jmeno, prijmeni;
   int vek;

   ifstream soubor2; // vstupni proud ze souboru (cteni)
   soubor2.open("test.txt", ios::in);
   soubor2 >> jmeno >> prijmeni >> vek;
   cout << jmeno << " " << prijmeni << " " << vek << endl;
   soubor2.close();

   return 0;

}

Karel Mozdren 22

Popis programu

Vynecháme to co už umíme

Příklad 1: klávesnice a obrazovka

   cout << "Zadej prosim sve jmeno: ";
   string jmeno;
   cin >> jmeno;
   cout << "Vase jmeno je " << jmeno << endl;
   return 0;

"cout" je proud standardního výstupu na obrazovku. přesměrování dat se provádí pomocí operátoru <<. Tento operátor si můžeme představit jako šipku, která ukazuje směr toku dat. U cout ukazuje na cout, data jdou tedy ven na obrazovku. U cin ukazuje šipka směrem do proměnné (>>), data jdou tedy z klávesnice do proměnné.

Příklad 2: soubory

#include <fstream>

"fstream" nám umožňuje používat datové proudy propojené se soubory.

   ofstream soubor1; // vystupni proud do souboru (zapis)
   soubor1.open("test.txt", ios::out);
   soubor1 << "Karel" << endl << "Mozdren" << endl << 22;
   soubor1.close();

"ofstream" je proud, který umožňuje výstup do souboru. Soubor se otevře pomocí metody open která má parametry jméno souboru a přepínač. V našem případě jsme použili přepínač ios::out, který říká, že chceme zapisovat do souboru. K souborovému proudu se chováme jako k cout, s tím rozdílem, že se data nezobrazí na obrazovce, ale zapíší se do souboru. Každý soubor je třeba po ukončení práce uzavřít to uděláme pomocí close.

   string jmeno, prijmeni;
   int vek;

   ifstream soubor2; // vstupni proud ze souboru (cteni)
   soubor2.open("test.txt", ios::in);
   soubor2 >> jmeno >> prijmeni >> vek;
   cout << jmeno << " " << prijmeni << " " << vek << endl;
   soubor2.close();

"ifstream" Slouží jako proud ke čteni dat ze souboru. Funguje stejně jako cin, s tím rozdílem, že se data nenačítají z klávesnice, ale ze souboru. Pravidla jsou stejná: open otevíra (ios::in == cteni dat), close zavíra soubor.

Úkoly

  1. Napište procedůru, která zapíše do souboru text "Ahoj".
  2. Napište procedůru, která přečte ze souboru vytvořeného předchozím příkladem "Ahoj".
  3. Napište program, který se zeptá na jméno, příjmení a věk a údaje uloží do souboru. Použijte při tvorbě tohoto programu struktůry a procedůry.
  4. Rozšiřte tento program, tak aby se na začátku zeptal kolik lidí chce uživatel zadat. Podle počtu se bude dotazovat a bude postupně ukládat. Na konci programu se soubor přečte a data se vypíší na obrazovku. Testovat konec souboru lze pomocí eof() (eof == end of file). Například: if(soubor2.eof())

TOPlist