• 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

VPS Starter Arubacloud
0 głosów
2,258 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,340 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,340 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,340 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

0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 12 listopada 2022 w C i C++ przez piotr_domanski Bywalec (2,040 p.)
–1 głos
1 odpowiedź 422 wizyt

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...