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

C++ Odwołanie do uchwytu pliku z innej funkcji.

Ostatnio zmodyfikowano 2017-01-23 12:34
Autor Wiadomość
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.

C/C++
// alarm_fit.cpp - nie pozwolimy Ci sie zasiedziec.

#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.
P-156818
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()).
P-156819
RagnarPL
Temat założony przez niniejszego użytkownika
» 2017-01-23 11:42:55
Coś takiego?

C/C++
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.

C/C++
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ć?
P-156820
mateczek
» 2017-01-23 12:10:53
C/C++
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!!!

C/C++
#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 );
}
P-156821
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.
P-156822
mateczek
» 2017-01-23 12:21:40
C/C++
#include <fstream>
#include<iostream>
using namespace std;

// jak poprawiłeś jest lepiej ale
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 ) // parametr nie potrzebny bo nie używasz
{
    std::fstream file1; //nowa deklaraacja obietu
    file1.open( "dane.txt" );
   
    if( !file1.is_open() )
         std::cout << "Nie udalo sie otworzyc pliku.\n";
    //file 1 się zamyka bo destruktor
}
P-156823
mateczek
» 2017-01-23 12:25:49
Po poprawkach.
C/C++
#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 ) // parametr nie potrzebny bo nie używasz
{
    file.open( "dane.txt" );
}
P-156824
RagnarPL
Temat założony przez niniejszego użytkownika
» 2017-01-23 12:25:56
Teraz rozumiem. Dziękuję :)
P-156825
« 1 » 2
  Strona 1 z 2 Następna strona