C++ Odwołanie do uchwytu pliku z innej funkcji.
Ostatnio zmodyfikowano 2017-01-23 12:34
RagnarPL Temat założony przez niniejszego użytkownika |
C++ Odwołanie do uchwytu pliku z innej funkcji. » 2017-01-23 11:04:36 Witam. Uczę się od niedawna programowania w języku C++. Czy może ktoś sprawdzić ten kod i wytknąć mi wszystkie błędy? Chciałbym też spytać jak odwołać się do uchwytu pliku z innej funkcji. Np. chciałbym stworzyć nową funkcję samego otwierania danego pliku i sprawdzania poprawności otwierania. Potem w innej funkcji wywołuję funkcję otwierania pliku, ale nie wiem jak odwołać się do zmiennej, która przechowuje dany plik. Program czeka 30 minut, a następnie daje sygnał i losuje ćwiczenie z pliku tekstowego. Potem pyta czy ćwiczenie zostało wykonane. Jeśli tak to znów czeka 30 minut i tak w kółko. Jeśli nie wykonamy danego ćwiczenia to przegrywamy.
#include <iostream> #include <cstdlib> #include <windows.h> #include <ctime> #include <fstream>
void show_menu(); void stay_fit(); int random();
int main() { using std::cout; using std::cin; show_menu(); char choose; cin >> choose; if( choose == '2' ) cout << "\nZapraszamy ponownie :)\n"; else { switch( choose ) { case '1': stay_fit(); break; default: system( "cls" ); cout << "Nie ma takiej opcji. Sprobuj jeszcze raz.\n\n"; main(); break; } } return 0; }
void show_menu() { using std::cout; cout << "1. Program Fit.\n"; cout << "2. Wyjdz z programu.\n\n"; cout << "Wybor: "; }
void stay_fit() { using std::cout; using std::cin; using std::string; using std::fstream; using std::endl; system( "cls" ); cout << "Stay Fit\n\n"; cout << "Co 30 minut przypomne Ci sygnalem, ze pora na cwiczenia.\n" << "Cwiczenie wylosujemy z pliku.\n\n"; cout << "Startujemy?(T/N): "; char choose; cin >> choose; while( choose != 'T' && choose != 't' && choose != 'N' && choose != 'n' ) { system( "cls" ); cout << "Zly wybor.\n"; cout << "Startujemy?(T/N): "; cin >> choose; } if( choose == 'T' || choose == 't' ) { char tell_true = 'T'; while( tell_true == 'T' || tell_true == 't' ) { system( "cls" ); cout << "Widzimy sie za 30 min :)\n"; Sleep( 1800000 ); system( "cls" ); cout << "\aJuz pora xD\n"; int random_number = random(); fstream file; file.open( "exercises.txt" ); if( !file.is_open() ) cout << "Nie udalo sie otworzyc pliku.\n"; string line; int count = 0; while( !file.eof() && count != random_number ) { getline( file, line ); ++count; } cout << "Wylosowales cwiczenie numer " << random_number << ": " << line; cout << "\n"; Sleep( 10000 ); cout << "Wykonales cwiczenie?(T/N): "; cin >> tell_true; while( tell_true != 'T' && tell_true != 't' && tell_true != 'N' && tell_true != 'n' ) { system( "cls" ); cout << "Pytam czy wykonales cwiczenie: "; cin >> tell_true; } if( tell_true == 'N' || tell_true == 'n' ) cout << "\nPrzegrales/as !!!\n\n"; } main(); } else if( choose == 'N' || choose == 'n' ) { cout << "\nJesli nie to wracamy do menu wyboru.\n\n"; main(); } }
int random() { srand( time( NULL ) ); return(( rand() % 10 ) + 1 ); }
P.S. Spytam tak jeszcze poza tematem. Posiadam książkę Język C++ Szkoła Programowania Stephen Prata Wydanie VI i Czysty Kod Podręcznik Dobrego Programisty. Uczę się z tych książek i dosyć dużo z nich rozumiem. Macie jakieś pomysły na to, w jaki sposób urozmaicić sobie naukę programowania? Myślałem nad tym, żeby pobawić się czymś takim jak Arduino albo Raspberry Pi. Albo może jakiś dodatkowy kurs praktyczny z C++? Mam zaoszczędzone 1000 zł i chciałbym je wydać na coś co popchnie moje rozumienie programowania bardziej do przodu. |
|
carlosmay |
» 2017-01-23 11:34:45 Albo przekaż obiekt (uchwyt pliku) do funkcji przez referencję (chyba najwygodniej), albo utworzony obiekt pliku w funcji zwróć (przesuń std::move()). |
|
RagnarPL Temat założony przez niniejszego użytkownika |
» 2017-01-23 11:42:55 Coś takiego? void file_open( fstream file ) { fstream file; file.open( "exercises.txt" ); if( !file.is_open() ) cout << "Nie udalo sie otworzyc pliku.\n"; }
int main() { file_open( file ); }
To co napisałem jako pierwsze nie działało, więc doczytałem trochę o referencji i zrobiłem to tak. void file_open( std::fstream & file )
int main() { fstream file; file_open( file ); }
void file_open( std::fstream & file ) { std::fstream file1; file1.open( "exercises.txt" ); if( !file1.is_open() ) std::cout << "Nie udalo sie otworzyc pliku.\n"; }
A reszta kodu jest w porządku czy trzeba coś poprawić? |
|
mateczek |
» 2017-01-23 12:10:53 void file_opened( fstream file ) { fstream file; file.open( "exercises.txt" ); if( !file.is_open() ) cout << "Nie udalo sie otworzyc pliku.\n"; }
int main() { file_opened( file ); }
moim zdaniem totalnei bezSensu!!! #include <fstream> #include<iostream> using namespace std;
void file_open( fstream & file ) { if( !file.is_open() ) cout << "Nie udalo sie otworzyc pliku.\n"; else cout << "plik otwarto.\n"; }
int main() { fstream plik( "dane.txt" ); file_open( plik ); }
|
|
RagnarPL Temat założony przez niniejszego użytkownika |
» 2017-01-23 12:12:56 Dzięki mateczek. To moje też działa, ale twoje wygląda bardzo przejrzyście. Dziękuję :)
Faktycznie głupio pomyślałem. |
|
mateczek |
» 2017-01-23 12:21:40 #include <fstream> #include<iostream> using namespace std;
void file_open( std::fstream & file );
int main() { fstream file; file_open( file ); if( file.is_open() ) { cout << "jak plik otwarty to ok" << endl; } else cout << "moim zdaniem raczej nie dziala" << endl; }
void file_open( std::fstream & file ) { std::fstream file1; file1.open( "dane.txt" ); if( !file1.is_open() ) std::cout << "Nie udalo sie otworzyc pliku.\n"; }
|
|
mateczek |
» 2017-01-23 12:25:49 Po poprawkach. #include <fstream> #include<iostream> using namespace std; void file_open( std::fstream & file );
int main() { fstream file; file_open( file ); if( file.is_open() ) { cout << "plik otwarty" << endl; } else cout << "blad otwarcia" << endl; }
void file_open( std::fstream & file ) { file.open( "dane.txt" ); }
|
|
RagnarPL Temat założony przez niniejszego użytkownika |
» 2017-01-23 12:25:56 Teraz rozumiem. Dziękuję :) |
|
« 1 » 2 |