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

Wczytywanie danych z pliku za pomocą operatora

Cloud VPS
0 głosów
467 wizyt
pytanie zadane 14 sierpnia 2016 w C i C++ przez Łukasz ER Początkujący (420 p.)
edycja 14 sierpnia 2016 przez Patrycjerz

Witam, Może mój problem jest śmieszny dla niektórych z was doświadczonych programistów jednak proszę o wyrozumiałość i pomoc. Poniższy program zrobiłem z wiedzy zawartej w kursach MZ c++. Po zalogowaniu się program otwiera Menu ze switchem dzięki któremu otwiera pliki tekstowe z danymi które następnie jako zalogowanu user chciałbym edytować. lecz problem pojawia się w momencie wybrania opcji i niestety nie generuje pliku txt. Probowałem nawet ręcznie dodać w folderze z głównym plikiem pliki txt jednak to nic nie dało. Pomocy. 
Nie wiem czy ma to jakies znaczenie ale uzywam xcode na osx chociaż w code::blocks dla maca problem był ten sam . 

Z góry dziekuję i pozdrawiam

#include <iostream>
#include <fstream>
#include <string>



using namespace std;
string login, haslo;
int opcja;              //wybor opcji menu uzytkownika
string moje_dane;
string dane_log;
int proby=0;              //liczba prób logowania


int main(int argc, const char * argv[]) {
    
    //START LOG IN ------------------------------------------
    
    cout<<"Podaj login: ";
    cin>>login;
    cout<<"Podaj hasło: ";
    cin>>haslo;
    
    if (((login=="admin")&&(haslo=="admin")))
        cout<<"Jesteś zalogowany"<<endl;
    
    for( int i=proby; i<=2; i++ )
    {
        if (((login!="admin")||(haslo!="admin"))&&(proby<2)){
        cout<<"Logowanie nie powiodło się! Spróbuj ponownie "<<endl;
        cout<<"Podaj login: ";
        cin>>login;
        cout<<"Podaj hasło: ";
        cin>>haslo;
        }
    if (((login!="admin")||(haslo!="admin"))&&(proby==2))
        cout<<"3 krotne błędne logowanie konto zablokowane"<<endl;
        proby++;
    }
    
    //START MENU OPTIONS ------------------------------------------
    
    for(;;){
    if (((login=="admin")&&(haslo=="admin"))) {
        
    cout<<"PANEL UŻYTKOWNIKA"<<endl;
    cout<<"-----------------"<<endl;
    cout<<"1. "<<"Moje dane"<<endl;
    cout<<"2. "<<"Zmiana hasła"<<endl;
    
    cout<<"wybierz opcję menu: ";
    cin>>opcja;
    
    //START INPUT DATABASE ------------------------------------------
    
    switch(opcja){
        case 1:
        { ifstream moje_dane;
            moje_dane.open("dane.txt",ios::in | ios::out);
         
            if (!moje_dane.good()) cout<<"Plik nie istnieje"<<endl;  }
        case 2:
        { ifstream dane_log;
            dane_log.open("logowanie.txt", ios::in | ios::out);
            
                if (!dane_log.good()) cout<<"Plik nie istnieje"<<endl;   }
            
        default: if (opcja>2) cout<<"Wybrana opcja nie istnieje"<<endl;
    }
    
    }
    }
    

    
    
    
    
    
    
    return 0;
}

1 odpowiedź

0 głosów
odpowiedź 14 sierpnia 2016 przez Patrycjerz Mędrzec (192,320 p.)

Czy przy obiekcie std::ifstream flaga std::ios::out ma rację bytu?

komentarz 14 sierpnia 2016 przez Łukasz ER Początkujący (420 p.)

Probowałem również w ten sposob i nic : 

//START INPUT DATABASE ------------------------------------------
        string imie, nazwisko, ulica, numer, miejscowosc;
    switch(opcja){
        case 1:
            cout<<"Podaj imię: "; cin>>imie;
            cout<<"Podaj nazwisko: "; cin>>nazwisko;
            cout<<"Podaj ulicę: "; cin>>ulica;
            cout<<"Podaj numer: "; cin>>numer;
            cout<<"Podaj miejscowosc: "; cin>>miejscowosc;
            
        { fstream moje_dane;
            moje_dane.open("dane.txt",ios::out);
            string line;
            
            moje_dane<<imie<<endl;
            moje_dane<<nazwisko<<endl;
            moje_dane<<ulica<<endl;
            moje_dane<<numer<<endl;
            moje_dane<<miejscowosc<<endl;
            
            if (!moje_dane.good()) cout<<"Plik nie istnieje"<<endl;  }
            
        case 2:
        { fstream dane_log;
            dane_log.open("logowanie.txt", ios::out);
            
            
            
            
            if (!dane_log.good()) cout<<"Plik nie istnieje"<<endl;   }
            
        default: if (opcja>2) cout<<"Wybrana opcja nie istnieje"<<endl;
    }
    
    }
    }

 

komentarz 14 sierpnia 2016 przez Łukasz ER Początkujący (420 p.)
w programie wszystko działa tylko plik sie nie tworzy
komentarz 14 sierpnia 2016 przez Patrycjerz Mędrzec (192,320 p.)

Mi dla obiektu std::fstream i flagi std::ios::out plik się normalnie tworzy. Korzystam z Visual Studio oraz Windowsa - możliwe, że jest to zależne od implementacji. Jeśli tak, polecam zapoznać się z systemowym API dla OS X - powinieneś znaleźć tam odpowiednią funkcję, która stworzy plik za ciebie.

komentarz 14 sierpnia 2016 przez Łukasz ER Początkujący (420 p.)
No właśnie przetestowałem to pod windows i działa w 100%

ok przetestuję. By the way dzieki za czas Patrycjerz
komentarz 14 sierpnia 2016 przez Łukasz ER Początkujący (420 p.)
Jak ktoś korzystający z IOS a miałby podobny problem to tu jest link do filmu który rozwiazuje ten problem . Sęk był w tym że pliki txt z danymi nie zapisują się w folderze z głównym  z plikiem.cpp tylko przynajmniej u mnie /Users/Library/Developer/Xcode/DerivedData i tam należy znalezc folder debug w którym są pliki txt

https://www.youtube.com/watch?v=De6trY8FRYY

Podobne pytania

0 głosów
2 odpowiedzi 271 wizyt
0 głosów
2 odpowiedzi 530 wizyt
pytanie zadane 12 września 2018 w C i C++ przez Archeon Początkujący (480 p.)
+1 głos
1 odpowiedź 186 wizyt
pytanie zadane 5 stycznia 2016 w JavaScript przez Majkel Nowicjusz (210 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...