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

Zapis | Odczyt.

Object Storage Arubacloud
0 głosów
286 wizyt
pytanie zadane 4 czerwca 2015 w C i C++ przez Mleczko Początkujący (260 p.)

Witam!

 

Problem polega na tym, iż zrobiłem 2 małe programy, kalkulator, który zapisuje dane użytkownika wprowadzone na początku oraz program, który te dane odczytuje, jednak odczytuje on tylko dane wprowadzone po raz pierwszy, reszta tkwi w notatniku ale program ich nie uwzględnia.

 

kody źródłowe 

1.Kalkulator

#include <iostream>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
#include <fstream>
using namespace std;
float x,y;
char wybor;
string imie, nazwisko;
string klasa;

int main()
{
    cout <<"Podaj swoje imie: ";
                                        cin >>imie;
    cout << "Podaj swoje nazwisko: ";
                                        cin >>nazwisko;
    cout << "Podaj swoja klase: ";
                                        cin>>klasa;

   fstream plik;

    plik.open("dane.txt", ios::out | ios::app);
    plik<<imie<<endl;
    plik<<nazwisko<<endl;
    plik<<klasa<<endl;


    plik.close();

    cout<< endl;
for (;;)
{


    cout << "Podaj pierwsza liczbe: ";
    cin >> x;
    cout << " Podaj druga liczbe: ";
    cin >> y;




    cout << endl;
    cout << "MENU GLOWNE" <<endl;
    cout<< "---------------"<<endl;
    cout <<"1. Dodawanie"<<endl;
    cout <<"2. Odejmowanie" <<endl;
    cout <<"3. Mnozenie" <<endl;
    cout <<"4. Dzielenie" <<endl;
    cout <<"5. Zamknij" <<endl;


    cout <<" Wybierz: " ;
    wybor = getch();

    switch(wybor)
    {
    case '1':

            cout<<"Suma = " <<x+y;

        break;

    case '2':

        cout<<"Roznica = "<<x-y;

        break;

    case '3':
        cout<<"Iloczyn = "<<x*y;

        break;

    case '4':
        if (y==0) cout <<"Nie dzielimy przez zero!";
        else cout <<"Iloraz = "<<x/y;

        break;

    case '5':
        system("pause");
        exit (0);
        break;

        default: cout<<" Taka opcja nie istnieje w menu!";

    }
getchar();getchar();
system("cls");
}
system("pause");
    return 0;
}

2. Odczyt

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

int main()

{
    string imie,nazwisko,klasa;
fstream plik;
plik.open("dane.txt", ios::in);
if(plik.good()==false)
{
    cout<<"Plik nie istnieje!";
     system("pause");
    exit(0);
}
string linia;
int nrlinii=1;
while(getline(plik, linia))
{
    switch(nrlinii)
    {
        case 1: imie = linia; break;
        case 2: nazwisko = linia;break;
        case 3: klasa = linia; break;
    }



nrlinii++;
}
plik.close();


   cout<<imie<<endl;
    cout<<nazwisko<<endl;
    cout<<klasa<<endl;




 system("pause");
    return 0;

}

 

2 odpowiedzi

0 głosów
odpowiedź 4 czerwca 2015 przez draghan VIP (106,230 p.)

Hmmm... Chyba chodzi o to, że Twój program zapisujący zawsze dopisuje na końcu pliku dane, a nie nadpisuje dotychczasowej zawartości.

// zamień:
plik.open("dane.txt", ios::out | ios::app); 
// na
plik.open("dane.txt", ios::out); 

i daj znać, czy o to Ci chodziło. :)

komentarz 4 czerwca 2015 przez draghan VIP (106,230 p.)

Okej, to daj zamiast lenght() size()

komentarz 4 czerwca 2015 przez Mleczko Początkujący (260 p.)
Działa, dziękuje za pomoc :) Miłego popołudnia :)
komentarz 4 czerwca 2015 przez draghan VIP (106,230 p.)
A rozumiesz ten kod? :)
komentarz 4 czerwca 2015 przez Mleczko Początkujący (260 p.)
W mniejszym lub większym stopniu tak, dużo pomogła mi w zrozumieniu Twoja wcześniejsza wypowiedź :). Jeszcze pewnie sobie go przeanalizuje na spokojnie trochę później.
komentarz 10 czerwca 2015 przez Mleczko Początkujący (260 p.)
edycja 10 czerwca 2015 przez Mleczko
Jeżeli możesz to wytłumaczysz mi dokładne znaczenie tego kodu ?

 

EDIT: pytam bo mam chwilę czasu ;)
0 głosów
odpowiedź 4 czerwca 2015 przez criss Mędrzec (172,590 p.)
No a jak ma odczytywać? Masz w zapisie ios::app, więc program dopisuje do pliku. Tak więc imie zapisane po raz 2., będzie w 4. linii.

Ja bym zrobił to tak:

Pirwszą linie pliku przeznacz na liczbe "dopisywań" ( po prostu za każdym razem, gdy zapisujesz, pobieraj ją z pliku, zwiększaj o 1 i zapisz ponownie. I w petli zrób odczyt. Tzn. jak masz ten case, to zamiast 1,2,3 - daj liczba_dopisywan * nr. Mozesz tez dac uzytkownikowi do wyboru, ktory zapis chce odczytac - czyli dajesz mu mozliwosc wyboru tego mnoznika nr linii.
komentarz 4 czerwca 2015 przez Mleczko Początkujący (260 p.)
Tak szczerze to dopiero uczę się C++ (myślę, że widać po kodzie jak i po pytaniu) i nie za bardzo wiem jak to zrobić, tzn. wiem o co chodzi jednak dużo się mi miesza w tym momencie ...
komentarz 4 czerwca 2015 przez criss Mędrzec (172,590 p.)
Rozumiem, tez z czasem co raz latwiej wszystko ogarniam :D No ale, widze, ze juz znalazles dzialajace rozwiazanie, wiec zostawiam temat

Podobne pytania

0 głosów
2 odpowiedzi 1,314 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez nooblike Nowicjusz (120 p.)
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 7 grudnia 2018 w C i C++ przez matiibal Użytkownik (620 p.)
0 głosów
1 odpowiedź 245 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...