Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 33 - kod z kursu

Ostatnio zmodyfikowano 2017-12-09 22:00
Autor Wiadomość
sair
Temat założony przez niniejszego użytkownika
Rozdział 33 - kod z kursu
» 2017-12-09 20:14:24
Witam, mam pytanie odnośnie tego jak działa ten kod

C/C++
#include <conio.h>
#include <fstream>
#include <string>
#include <iostream>

using namespace std;
void wykonajOperacje( int liczba1, string napis, int liczba2 )
{
    if( napis == "dodac" )
    {
        cout << liczba1 << " + " << liczba2 << " = " << liczba1 + liczba2 << endl;
    }
    else if( napis == "odjac" )
    {
        cout << liczba1 << " - " << liczba2 << " = " << liczba1 - liczba2 << endl;
    }
    else
    {
        cout << "Nieznana operacja \"" << napis << "\" - nie mozna wykonac obliczen." << endl;
       
       
       
    }
}

bool wczytajPlik( string nazwaPliku )
{
    fstream plik;
    plik.open( nazwaPliku );
    if( !plik.good() )
         return false;
   
    int a;
    string b;
    int c;
   
    while( plik.good() )
    {
       
       
        plik >> a;
        plik >> b;
        plik >> c;
        wykonajOperacje( a, b, c );
       
       
    } //while
    return true;
}

int main()
{
    if( !wczytajPlik( "dane.txt" ) )
         cout << "Nie udalo sie otworzyc pliku!" << endl;
   
    _getch();
    return 0;
}

Mianowicie skąd program wie, że ma pobrać następną linijke tekstu z pliku "dane.txt"? Tzn na początku program pobiera pierwszą linijkę tekstu, wykonuje na niej żądane operacje, a nastepnie pobiera kolejną linijkę i dzieje się to bez dodatkowego kodu który mówiłby programowi że ma to zrobić.
P-167758
YooSy
» 2017-12-09 20:42:37
C/C++
while( plik.good() )
{
   
   
    plik >> a;
    plik >> b;
    plik >> c;
    wykonajOperacje( a, b, c );
   
   
}
A oto winowajca całego zamieszania.
Skorzystaj z debuggera. Rozwieje twoje wątpliwości.
P-167759
sair
Temat założony przez niniejszego użytkownika
» 2017-12-09 21:01:57
No dobra, ale skąd wie że ma przejść do nowej linijki? równie dobrze mógłby pobierać w nieskończoność pierwszą linijke tekstu
P-167760
YooSy
» 2017-12-09 22:00:11
Odczyt danych jest dopasowany do wiersza w pliku.
W wierszu są trzy łańcuchy oddzielone spacją i tyle pogram pobiera jednorazowo w jednym cyklu pętli.
Operator
>>
 pomija wszystkie białe znaki poprzedzające odczytywaną wartość,
a znak nowej linii jest owym białym znakiem, więc automatycznie odczyt danych przenosi się do nowej linii.
P-167761
« 1 »
  Strona 1 z 1