Rozdział 33 - kod z kursu
Ostatnio zmodyfikowano 2017-12-09 22:00
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 #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 ); } 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ć. |
|
YooSy |
» 2017-12-09 20:42:37 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. |
|
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 |
|
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. |
|
« 1 » |