• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis liczb do pliku wygenerowanych przez program

0 głosów
1,647 wizyt
pytanie zadane 28 lutego 2016 w C i C++ przez Matheyas Obywatel (1,520 p.)
Cześć!

Napisałem program który generuje 11-cyfrowe liczby w ilości podanej przez użytkownika. Wyniki wypisują się w konsoli.   Chciałbym te wyniki zapisać w pliku .txt w takiej formie w jakiej wypisują się w konsoli (jedna pod drugą). Poradniki które znalazłem, dotyczą zapisu z klawiatury do pliku.

Jak przekonać Code::Block aby to zrobił?

2 odpowiedzi

+1 głos
odpowiedź 28 lutego 2016 przez Patrycjerz Mędrzec (192,460 p.)
wybrane 1 marca 2016 przez Matheyas
 
Najlepsza

Zapisuj wyniki do zmiennych tekstowych (jeśli są w postaci liczby, to użyj obiektu klasy std::stringstream oraz operatory << i >>) i przesyłaj je do pliku, za pomocą obiektu klasy std::fstream i operatora <<.

komentarz 28 lutego 2016 przez Matheyas Obywatel (1,520 p.)

Zapisuje cyfry w zmiennej "int" wypisując je po kolei, aż uzyskam liczbę - 11 cyfrową.

Lecz nie wiem czy to dobry pomysł... bo w kolejnym projekcie będę chciał te liczby rozbić w pojedyncze jednostki, by móc nimi manipulować - wdrożyć różne wzory. np:

1468

wynik=1*wzór+4*wzór+6*wzór+8*wzór

Myślę że zwykłe tablice mi w tym pomogą.

Ps. Szkoda, że na forum nie ma spojlerów. Na wszelki wypadek dodam swój kod.

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <fstream>
using namespace std;

int liczba, PESEL, x;
int main()

{
    fstream plik;
    srand(time(NULL));
    cout<<"Ile nr. PESEL potrzebujesz?";
    cin>>x;

    for (int i=0; i<x; i++)
        
       for (int I=0; I<=10; I++)

        {
        liczba = rand()% 9+1;
        cout<<liczba;
        
     if (I>=10)
        {
        cout<<endl;
        }

    }
    //plik.open("PESEL.txt", ios::out);
   // plik<<liczba;
    //plik.close();
    return 0;
}

 

komentarz 28 lutego 2016 przez Patrycjerz Mędrzec (192,460 p.)

Tak jak już pisałem, użyj zmiennej tekstowej, czyli std::string. Później generuj, po kolei, cyfry, a następnie konwertuj je na tekst (za pomocą std::stringstream). Potem dodawaj takie fragmenty tekstu do głównej zmiennej tekstowej, za pomocą operatora +=. Na koniec zostało ci przesłanie tego tekstu do pliku, za pomocą std::fstream.

komentarz 29 lutego 2016 przez Matheyas Obywatel (1,520 p.)

Znalazłem metody konwertowania int>string i odwrotnie.

{
    int liczba;
    stringstream ss;
    string str;
    ss << liczba;
    ss >> str;
    cout << str;
   
}

Czyli zachodzi sytuacja:

1) Po wylosowaniu jednej cyfry w "liczba" zostaje przesłana do zmiennej (??) "ss". Natomiast "ss" przekazuje do "str" która jest zmienną string? Na końcu zostaje wypisana "str" w celu weryfikacji poprawności wykonanego polecenia.

2) Dlaczego przesyłamy z "ss" do "str"? (zdaje sobie sprawę, że istnieje powód. Nie, jeszcze nie szukałem tego powodu)

Bynajmniej gdy wykorzystuje powyższy kod, wyskakuje mi że "ss" nie ma deklaracji w zakresie(?). Zmienna "liczba" nie deklaruje?

Edit:

Podczas pisania tej odpowiedzi zdołałem napisać trzy różne rozwiązania...  W każdym razie chyba się udało. Za pomocą zwykłego interatora jak i stringa. Tak dla pewności:

   {
        plik.open("PESEL.txt", ios::out | ios::app);
        liczba = rand()% 9+1;
        //cout<<liczba;
    stringstream ss;
    string str;
        ss << liczba;
        ss >> str;
        cout << str;
    
plik<<liczba;
        
         if (I>=10)
        {
         cout<<endl;
         plik<<endl;
        }


plik.close();
    }

3) Program do testów został stworzony. Mam wypisane liczby w .txt. Pytanie jest tu różnica między int a string? Jak będę odczytywał w nowym programie plik .txt przecież nie będzie wiedział jakich zmiennych użyłem string int?

4)Jak numerować linie podczas dodawania kodu?

komentarz 29 lutego 2016 przez Patrycjerz Mędrzec (192,460 p.)
  1. Działanie klasy std::stringstream opiera się na pojęciu strumienia (z ang. stream), czyli specjalnego miejsca, z którego korzystają std::cout, std::cin i wiele, wiele innych klas, także nasza omawiana. W skrócie można powiedzieć, że to taki uporządkowany bufor na dane, który umożliwia przesył, a także uprzednią modyfikacje wartości w nim się znajdujących. Oczywiście w tym zastosowaniu zostały użyte przeciążone operatory << oraz >>, których sposobu działania nie musisz do końca rozumieć (sam nie znam implementacji tych operatorów), ale głównie chodzi o to, że ta klasa umożliwia transformacje danych z jednego typu na drugi, korzystając z typu zmiennej po prawej stronie operatora (przesłałeś zmienną int do obiektu ss, a później ss zwrócił ci tekst, ponieważ wykrył po prawej stronie operatora >> obiekt std::string). Oczywiście przeczytaj dokumentację, bo może odkryjesz coś ciekawego: http://www.cplusplus.com/reference/sstream/stringstream/.
  2. Odpowiedziałem ci już na to pytanie w pierwszym punkcie.
  3. Ta sama sytuacja. Klasa std::fstream także zawiera operatory << oraz >> i umożliwia to, przy odczycie pliku, na wykrycie, o jaki typ danych ci chodzi.
  4. O jaki kod ci chodzi? O ten na forum? Przecież jest on numerowany...
komentarz 29 lutego 2016 przez Matheyas Obywatel (1,520 p.)
Dzięki za rzetelną odpowiedź! Skupię się bardziej na stringach, bo wydaje mi się że to jest niezbędne dla początkującego.

W moim pierwszym kodzie nie był numerowany... a później nie zwróciłem uwagi, że zacząłem numerować.
0 głosów
odpowiedź 28 lutego 2016 przez Ceki Mądrala (5,310 p.)

Podobne pytania

–1 głos
1 odpowiedź 169 wizyt
+1 głos
1 odpowiedź 132 wizyt
pytanie zadane 23 marca 2021 w C i C++ przez jan1 Nowicjusz (220 p.)

87,895 zapytań

136,484 odpowiedzi

304,291 komentarzy

58,280 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...