Pirous Temat założony przez niniejszego użytkownika |
20.1 Referencje » 2010-09-15 21:12:49 Analizowałem podany tam przykład kilkakrotnie i nadal nie mam pojęcia, jak ten program może zapisywać jakiekolwiek dane do pliku. Czy mógłby ktoś wyjaśnić mi łopatologicznie jak dzieje się to, że zmienna danepliku przybiera jakąś wartość i ta wartość jest następnie zapisywana? Tutaj kod: #include <conio.h> #include <iostream> #include <string> #include <fstream> #include <sstream> void OdczytPliku( const std::string & nazwapliku, std::string & bufor ); void Algorytm( std::string & bufor, short & zmienna, int & Wynik ); void ZapisPliku( const std::string & nazwapliku, const std::string & bufor ); std::string PL( std::string & znak );
int main() { using std::string; using std::cout; const string NAZWAPLIKU = "mojplik.txt"; string danepliku; short x = 0; int wynik = 0; OdczytPliku( NAZWAPLIKU, danepliku ); Algorytm( danepliku, x, wynik ); ZapisPliku( NAZWAPLIKU, danepliku ); cout << PL( danepliku ); getch(); return 0; }
void OdczytPliku( const std::string & nazwapliku, std::string & bufor ) { using std::fstream; fstream plik; std::string bufor1; plik.open( nazwapliku.c_str(), std::ios::in ); if( plik.is_open() ) { while( !plik.eof() ) { getline( plik, bufor1 ); bufor1 += "\n"; bufor += bufor1; } } else std::cout << "Brak mojego pliku !"; }
void Algorytm( std::string & bufor, short & zmienna, int & Wynik ) { short pozycja, pozycja1; std::string bufor1; std::stringstream IntToStr; if( bufor.find( 'ż' ) ) { pozycja = bufor.find( 'ż' ); pozycja += 2; bufor1.assign( bufor, pozycja, 10 ); if( bufor1.find( ' ' ) ) { pozycja1 = bufor1.find( ' ' ); bufor1.assign( bufor1, 0, pozycja1 ); sscanf( bufor1.c_str(), "%d", & zmienna ); Wynik = 2 * ++zmienna + 15; IntToStr << zmienna; IntToStr >> bufor1; IntToStr.clear(); bufor.replace( pozycja, pozycja1, bufor1 ); if( bufor.find( "funkcja" ) ) { pozycja = bufor.find( '2', bufor.find( "funkcja" ) ); bufor.replace( pozycja + 4, pozycja1, bufor1 ); } if( bufor.find( "k to " ) ) { pozycja = bufor.find( ' ', bufor.find( "k to " ) ); IntToStr << Wynik; IntToStr >> bufor1; bufor.replace(( pozycja + 4 ), bufor1.length(), bufor1 ); } } if( bufor.find( "!" ) ) if( bufor.find( "." ) ) { } } else std::cout << "Brak szukanej litery!"; }
void ZapisPliku( const std::string & nazwapliku, const std::string & bufor ) { using std::fstream; fstream plik; plik.open( nazwapliku.c_str(), std::ios::out ); if( plik.is_open() ) { plik << bufor; } else std::cout << "Brak mojego pliku !"; }
std::string PL( std::string & znak ) { for( unsigned i = 0; i < znak.length(); i++ ) { switch( znak[ i ] ) { case 'ą': znak[ i ] = static_cast < char >( 165 ); break; case 'ć': znak[ i ] = static_cast < char >( 134 ); break; case 'ę': znak[ i ] = static_cast < char >( 169 ); break; case 'ł': znak[ i ] = static_cast < char >( 136 ); break; case 'ń': znak[ i ] = static_cast < char >( 228 ); break; case 'ó': znak[ i ] = static_cast < char >( 162 ); break; case 'ś': znak[ i ] = static_cast < char >( 152 ); break; case 'ź': znak[ i ] = static_cast < char >( 171 ); break; case 'ż': znak[ i ] = static_cast < char >( 190 ); break; case 'Ą': znak[ i ] = static_cast < char >( 164 ); break; case 'Ć': znak[ i ] = static_cast < char >( 143 ); break; case 'Ę': znak[ i ] = static_cast < char >( 168 ); break; case 'Ł': znak[ i ] = static_cast < char >( 157 ); break; case 'Ń': znak[ i ] = static_cast < char >( 227 ); break; case 'Ó': znak[ i ] = static_cast < char >( 224 ); break; case 'Ś': znak[ i ] = static_cast < char >( 151 ); break; case 'Ź': znak[ i ] = static_cast < char >( 141 ); break; case 'Ż': znak[ i ] = static_cast < char >( 189 ); break; } } return znak; }
|
|
SeaMonster131 |
» 2010-09-15 21:18:50 otaguj kod [ code src="C++" ] ... [ /code ] (bez spacji) - bo czytać sie nie da... |
|
ison |
» 2010-09-15 21:28:43 wszystko co robisz z referencją zmiennej dzieje się również z nią samą przykładowo, jeśli chcesz napisać funkcję inkrementującą zmienną typu int: #include <cstdio>
void inc( int & liczba ) { ++liczba; }
int main() { int zmienna = 5; inc( zmienna ); printf( "Teraz zmienna wynosi: %d!\r\n", zmienna ); }
|
|
Pirous Temat założony przez niniejszego użytkownika |
» 2010-09-15 21:34:28 Aha, rozumiem. Dziękuję. |
|
DejaVu |
» 2010-09-15 22:08:56 |
|
ison |
» 2010-09-15 22:25:41 warto by jeszcze dopisać o praktycznym zastosowaniu referencji takim jak funkcja swap'ująca dwie zmienne oraz o zwracaniu referencji przez funkcję |
|
DejaVu |
» 2010-09-16 00:16:01 Jak masz propozycję rozwoju treści to napisz ją tu :) ja potem ją przekopiuję, trochę poprawię i dopiszę Ciebie do autorów ;p
/edit:
Pamiętaj, aby treść była banalna, a nie wyczerpywała temat, bowiem to mają być pomoce naukowe, a nie encyklopedia o danym problemie.
/edit2:
Nie sądzę, aby początkujący używał zmiennych zwracanych przez referencję. Prędzej krzywdę się zrobi takiemu czytelnikowi mówiąc o tym na dzień dobry, aniżeli przyniesie korzyści. |
|
« 1 » |