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

C++ odczytywanie z pliku

Ostatnio zmodyfikowano 2016-11-30 07:25
Autor Wiadomość
TaRaNTuLaH
Temat założony przez niniejszego użytkownika
C++ odczytywanie z pliku
» 2016-11-29 22:21:16
Cześć !

Jutro w szkole mamy drobną loterię fantów (zbiórka na cele charytatywne). Pogrzebałem więc na stronce pomodyfikowałem troszkę kody, które tu znalazłem ale mam problem z odczytywaniem pliku (na wypadek gdyby ktoś przez przypadek zamknął plik, zapis jest już zrobiony !!!)

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;


bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 58 ) + 1;
}


int main()
{
   
   
   
    /*
    int y;
    cin>>y;
    if (y==5)
    */
    int liczba;
    srand( time( NULL ) );
    int wylosowane[ 58 ];
    int wylosowanych = 0;
    int max = 58;
    fstream plik;
   
   
    /*
        aaa:
       
        switch(y){
        case 2:
        {
       
        break;
    }
    case 5:
    {
   
    break;
    }
    default:
    {
    goto aaa;
    }
        }*/
   
   
   
    do
    {
        liczba = wylosuj();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 58 );
   
    wylosowanych = 0;
   
    cin.get();
    do
    {
       
        TUTAJ CHC Ę ODCZYTYWANIE ZROBI Ć !
       
        cout << "Pozostala ilosc losow:" << max - wylosowanych - 1 << "/" << max << endl;
        cout << "Twoj numer to:  ";
        cout << wylosowane[ wylosowanych ] << endl;
        wylosowanych++;
        cout << "Twoja nagroda to:  ";
       
        if( wylosowane[ wylosowanych - 1 ] >= 1 && wylosowane[ wylosowanych - 1 ] <= 1 )
             cout << "Dlugopis\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 2 && wylosowane[ wylosowanych - 1 ] <= 7 )
             cout << "Ksiazka\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 8 && wylosowane[ wylosowanych - 1 ] <= 8 )
             cout << "Torba\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 9 && wylosowane[ wylosowanych - 1 ] <= 16 )
             cout << "Pluszak\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 17 && wylosowane[ wylosowanych - 1 ] <= 21 )
             cout << "Sluchawki\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 22 && wylosowane[ wylosowanych - 1 ] <= 23 )
             cout << "Komplet Dlugopisow\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 24 && wylosowane[ wylosowanych - 1 ] <= 37 )
             cout << "Bryloczek\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 38 && wylosowane[ wylosowanych - 1 ] <= 42 )
             cout << "Notes\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 43 && wylosowane[ wylosowanych - 1 ] <= 45 )
             cout << "Czerwony Notes\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 46 && wylosowane[ wylosowanych - 1 ] <= 48 )
             cout << "Frisbee\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 49 && wylosowane[ wylosowanych - 1 ] <= 49 )
             cout << "Ksiazka\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 50 && wylosowane[ wylosowanych - 1 ] <= 51 )
             cout << "Kubek\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 52 && wylosowane[ wylosowanych - 1 ] <= 54 )
             cout << "Zawieszka\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 55 && wylosowane[ wylosowanych - 1 ] <= 56 )
             cout << "Mydelko\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 57 && wylosowane[ wylosowanych - 1 ] <= 57 )
             cout << "Plyn z Sephory\n";
       
        if( wylosowane[ wylosowanych - 1 ] >= 58 && wylosowane[ wylosowanych - 1 ] <= 58 )
             cout << "Krem pod prysznic H&M \n";
       
       
       
        plik.open( "plik.txt", ios::out | ios::app );
        if( plik.good() == true )
             plik << wylosowane[ wylosowanych - 1 ] << endl;
       
        plik.close();
       
       
        cin.get();
       
       
    } while( wylosowanych < 58 );
   
   
    return 0;
}
P-154302
karambaHZP
» 2016-11-30 05:54:04
» Kurs C++Poziom 4 dział kursu
P-154321
karambaHZP
» 2016-11-30 05:54:17
» Kurs C++Poziom 4 dział kursu
P-154322
TaRaNTuLaH
Temat założony przez niniejszego użytkownika
» 2016-11-30 06:38:30
Przeczytałem.. Zastosowałem się do tego co jest tam napisane ale program nadal nie działa tak jak należy..

Po obiegu pętli do program wypisuje liczby, są one spisywane w plik.txt. Jeżeli przypadkowo zamknę program, przy następnym uruchamianiu programu, program najpierw sczyta co jest w pliku "plik.txt" i gdzieś to będzie przechowywał, żeby dwa razy te same liczby nie padły :/

Jak to zrobić? Na końcu jest zapisywanie do pętli, zrobiłem odczytywanie przed pętla i nie działa jak należy.. :(
P-154323
TaRaNTuLaH
Temat założony przez niniejszego użytkownika
» 2016-11-30 06:43:45
Jeszcze prościej mówiąc..

Plik ma sczytać dane z SAMEGO SIEBIE, i je wstawić do tych które już padły
P-154324
karambaHZP
» 2016-11-30 07:25:08
Ciężko zrozumieć ten opis.

Proponuję takie rozwiązanie.
Na początku program wczytuje dane z pliku z listą fantów i zapisuje w jakiejś tablicy (string, ew. struct).
Z drugiego pliku wczytujesz (plik otwarty w trybie odczyt/zapis i dodawaniem do pliku) do drugiej tablicy (indeksów int).
Losujesz indeks.
Sprawdzasz, czy był już taki. Jeśli nie dopisz indeks do pliku.

Ja zrobiłbym vector fantów i vector indeksów.
Losował element vectora i po wyświetlaniu fanta, usunął element z vectora i nadpisal plik indeksów pozostałymi w vectorze.
Chyba, że fanty są inne za każdym razem, więc wystarczy usuwać z vectora fantów i nadpisywać plik fantów po każdym losowaniu.
P-154325
« 1 »
  Strona 1 z 1