logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C++] Jak utworzyć plik, wypełnić zerami i wczytać do tablicy?

sebikom 23 Gru 2008 14:03 12151 4
REKLAMA
  • #1 5894366
    sebikom
    Poziom 2  
    Posty: 4
    Witam
    Chce napisać takie coś, że jeśli niema pliku to go tworzy i wypełnia 5 linijek zerami i potem to wczytuje do tablicy, a jeśli plik istnieje od razu wczytuje.
    Mam takie coś
    
    int z;
    string rekord[5];
    int rekordx[5];
    
    
    
    void wyniki()
    {
    fstream rekordy;
    rekordy.open("rekordy.txt");
    
    if (!rekordy)
    {
            rekordy.close();
            fstream rekordy("rekordy.txt", ios::out);
            for (int j=1; j<=5; j++)
            {
                    rekordy<<"0\n";
            }
            rekordy.close();
            rekordy.open("rekordy.txt", ios::in);
    }
    
    k=0;
    while(getline(rekordy, rekord[k]))
    {
            k++;
    }
    
    for (int j=0;j<=4; j++)
    {
            stringstream z(rekord[j]);
            z>>rekordx[j];
    }
    ShowMessage(rekordx[1]);
    ShowMessage(rekord[1].c_str());
    }
    

    I mam taki problem ze jeśli plik istnieje to jest ok, jeśli go niema to go tworzy i wypełnia zerami ale juz nie wczytuje prawidłowo
  • REKLAMA
  • #2 5894441
    mktroch
    Poziom 2  
    Posty: 4
    patrząc na szybko w kod uważam że powinieneś przed petlą

    
    for (int j=0;j<=4; j++) 
    { 
            stringstream z(rekord[j]); 
            z>>rekordx[j]; 
    }
    


    ustawić znacznik pozycji w pliku na początek pliku, ponieważ w pętli

    
    while(getline(rekordy, rekord[k])) 
    { 
            k++; 
    }
    


    odczytujesz plik przy okazji przesuwając wskaźnik pozycji na jego koniec
  • REKLAMA
  • #3 5894590
    sebikom
    Poziom 2  
    Posty: 4
    Ale odczytywanie działa, ja mam problem z
    
    if (!rekordy) 
    { 
            rekordy.close(); 
            fstream rekordy("rekordy.txt", ios::out); 
            for (int j=1; j<=5; j++) 
            { 
                    rekordy<<"0\n"; 
            } 
            rekordy.close(); 
            rekordy.open("rekordy.txt", ios::in); 
    } 
    

    ponieważ gdy wychodzi z tego ifa dalsza część kodu przestaje działać
    Nie wiem jak to zrobic, że najpierw zapisuje plik, a potem go czyta
  • REKLAMA
  • #4 5895472
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    Zrobiłeś zmienną lokalną
      fstream rekordy("rekordy.txt", ios::out);

    wewnątrz ifa. Po zakończeniu if'a ta zmienna znika, a oryginalnej zmiennej, zadeklarowanej na początku funkcji, nie zmieniasz. Zmień ta linijkę w if'ie na:
    rekordy.open("rekordy.txt", ios::out);


    Dodano po 2 [minuty]:

    Tak dla drobnego wyjaśnienia - każda para nawiasów { } tworzy osobny blok, i zmienne zadeklarowane w danym bloku nie są widziane na zewnątrz, czyli:

    void fun() 
    {
      int a = 1;
      {
        int b = 2;
      }
      cout << b;
    }


    nie zadziała ;-)
  • #5 5895809
    sebikom
    Poziom 2  
    Posty: 4
    zmieniłem tak , ale teraz to jeśli niema pliku to go tworzy ale juz nie wypełnia zerami
REKLAMA