Zapis wylosowanego zestawu liczb do pliku

Odpowiedz Nowy wątek
2017-03-15 12:40
0

Witam. Jaki jest najprostszy sposób, na zapis wylosowanych zestawów liczb(po 5,6 lub 10 w jednym zakładzie) do pliku tekstowego z możliwością późniejszego ich dopisywania do wcześniej już stworzonego pliku txt. Wiem, że to odbywa się za fstream, ale nie wiem dokładnie, gdzie ustawić funkcję zapisującą. Poniżej załączam kod, w którym zastosowałem fstream, ale nie działa mi prawidłowo. Pomożecie?

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <fstream>
using namespace std;
int main()
{
    int n, los, tab[6];
    cout << "Generator(6 z 49)" << endl;
    cout << "Podaj ilosc zakladow:";
    cin >> n;
    srand(time(NULL));
    for (int x = 1; x <= n; x++) {
        for (int i = 0; i < 6; i++) {
            los = (rand() % 49) + 1;
            int liczbaJuzByla = 0;
            for (int j = 0; j < i; j++)
                if (tab[j] == los)
                    liczbaJuzByla = 1;
            if (liczbaJuzByla)
                i--;
            else
                tab[i] = los;
        }
        cout << "Zaklad " << x << ": ";
        for (int i = 0; i < 6; i++) {
            cout << tab[i] << "  ";
        }
        cout << endl;
    }
    fstream zapisz("wyniki.txt", ios::out);
    zapisz << tab[6] << endl;
    zapisz.flush();
    zapisz.close();
    system("pause");
    return EXIT_SUCCESS;
}
edytowany 1x, ostatnio: kq, 2017-03-15 12:46

Pozostało 580 znaków

2017-03-15 12:49
kq
1

Zapisujesz siódmy element sześcioelementowej tablicy (UB i bezsens):

zapisz << tab[6] << endl

Zamiast tego skopiuj tablicę do pliku:

copy(begin(tab), end(tab), ostream_iterator<int>(zapisz));

Swoją drogą, nie używaj rand do losowości. C++ ma <random>, który znacznie takie operacje upraszacza. Ponadto losowanie bez powtórzeń dla małych zbiorów lepiej zrobić poprzez przetasowanie zbioru i wybranie n pierwszych elementów.

PS: poprawiłem formatowanie, bo to co zapostowałeś to była tragedia. Na przyszłość staraj się to robić sam ;​)


edytowany 2x, ostatnio: kq, 2017-03-15 16:52

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0