Kacperjas utworzono 7 września 2013 utworzono 7 września 2013 (edytowane) Witam! Program ma załączoną bibliotekę fstream. Fragment kodu: //POCZĄTEK WCZYTYWANIA fstream plik("form.txt", ios::in); getline(plik, Imie); getline(plik, Nazwisko); getline(plik, Wiek); getline(plik, email); getline(plik, telefon); plik.close(); //KONIEC WCZYTYWANIA // WYPISYWANIE INFORMACJI wys("Imie", Imie); wys("Nazwisko", Nazwisko); wys("Wiek", Wiek); wys("Email", email); wys("Telefon", telefon); Funkcja wys wyświetla zmienne ale nie wyświetlają się. Czy popełniłem jakiś błąd w odczytywaniu? Wg mojego założenia program powinien odczytywać każdą linijkę po kolei, ale tak nie jest... Mogę udostępnić większy fragment kodu. EDIT: Dodaję Prt Sc [attachment=26372:Odczyt nie działa.jpg]
Kacperjas komentarz 7 września 2013 Autor komentarz 7 września 2013 (edytowane) Oto ona void wys(string opis, string wlasciwy) { //0 - czarny //1 - niebieski //2 - zielony //3 - błękitny //4 - czerwony //5 - purpurowy //6 - żółty //7 - biały //8 - szary //9 - jasnoniebieski //10 - jasnozielony //11 - jasnobłękitny //12 - jasnoczerwony //13 - jasnopurpurowy //14 - jasnożółty //15 - jaskrawobiały HANDLE hWyj; hWyj = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute( hWyj, 14); cout<<opis<<setw(30)<<"-->"; SetConsoleTextAttribute( hWyj, 13); cout<<wlasciwy<<endl; SetConsoleTextAttribute( hWyj, 15); } EDIT: Wszystkie dołączone biblioteki: #include <windows.h> #include <iostream> #include <string> #include <stdio.h> #include <iomanip> #include <fstream>
Garrappachc komentarz 8 września 2013 komentarz 8 września 2013 fstream plik("form.txt", ios::in); plik >> Imie >> Nazwisko >> Wiek >> email >> telefon; plik.close();
Kacperjas komentarz 9 września 2013 Autor komentarz 9 września 2013 (edytowane) Nie działa :beksa: Ciągle to samo... Zmodyfikowałem kod na taki: fstream plik; plik.open("form.txt", ios::in); if(plik.good()) getline(plik, Imie); else cout<<"ERROR!"<<endl; Program wyświetla napis error O.o
Garrappachc komentarz 9 września 2013 komentarz 9 września 2013 Plik nie istnieje lub nie ma praw do odczytu. W metodzie fstream::open() podaj bezwzględną ścieżkę. 1
Kacperjas komentarz 10 września 2013 Autor komentarz 10 września 2013 (edytowane) Hmm... Programuję na koncie Gościa :facepalm: może dlatego pozbawia mnie praw... Plik ma być gdzie jest main.cpp (tam mam kod)? EDIT: Na koncie admina też nie działa... Gdzie postawić tą metodę? EDIT2: Przy fragmencie: //POCZĄTEK WCZYTYWANIA fstream plik; plik.open("form.txt", ios::in); fstream::open("C:\\Users\\Admin\\Documents\\Visual Studio 2010\\Projects\\Konsolowy_2\\Konsolowy_2\\Form.txt"); if(plik.good()) getline(plik, Imie); else cout<<"ERROR!"<<endl; //plik >> Imie >> Nazwisko >> Wiek >> email >> telefon; /*getline(plik, Imie); getline(plik, Nazwisko); getline(plik, Wiek); getline(plik, email); getline(plik, telefon);*/ plik.close(); //KONIEC WCZYTYWANIA // WYPISYWANIE INFORMACJI wys("Imie", Imie); wys("Nazwisko", Nazwisko); wys("Wiek", Wiek); wys("Email", email); wys("Telefon", telefon); } Jest błąd uniemożliwiający dalszą kompilacje: [spoiler]1>------ Build started: Project: Konsolowy_2, Configuration: Debug Win32 ------ 1> main.cpp 1>c:\users\admin\documents\visual studio 2010\projects\konsolowy_2\konsolowy_2\main.cpp(60): error C2352: 'std::basic_fstream<_Elem,_Traits>::open' : illegal call of non-static member function 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits 1> ] 1> c:\program files\microsoft visual studio 10.0\vc\include\fstream(1315) : see declaration of 'std::basic_fstream<_Elem,_Traits>::open' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits 1> ] ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========[/spoiler]
leggo komentarz 11 września 2013 komentarz 11 września 2013 Niepotrzebnie dwa razy wywołujesz open, za drugim razem nawet nie łącząc tego z żadną zmienną. Zmień to w jedno wywołanie: plik.open("C:\\Users\\Admin\\Documents\\Visual Studio 2010\\Projects\\Konsolowy_2\\Konsolowy_2\\Form.txt", ios::in); 1
Garrappachc komentarz 11 września 2013 komentarz 11 września 2013 Moje fstream::open() odnosiło się do nazwy metody, nie mówiłem że masz to w ten sposób wywołać...
Kacperjas komentarz 11 września 2013 Autor komentarz 11 września 2013 Znów przy tym nieszczęsnym programie na koncie gościa wyświetla ERROR! Fragment kodu: //POCZĄTEK WCZYTYWANIA fstream plik; plik.open("C:\\Users\\Gość\\Documents\\Visual Studio 2010\\Projects\\Konsolowy_2\\Konsolowy_2\\form.txt", ios::in); if(plik.good()) getline(plik, Imie); else cout<<"ERROR!"<<endl; //plik >> Imie >> Nazwisko >> Wiek >> email >> telefon; /*getline(plik, Imie); getline(plik, Nazwisko); getline(plik, Wiek); getline(plik, email); getline(plik, telefon);*/ plik.close(); //KONIEC WCZYTYWANIA // WYPISYWANIE INFORMACJI wys("Imie", Imie); wys("Nazwisko", Nazwisko); wys("Wiek", Wiek); wys("Email", email); wys("Telefon", telefon);
Garrappachc komentarz 12 września 2013 komentarz 12 września 2013 Ścieżka wydaje się być niepoprawna. Katalog "Gość" prawdopodobnie nie istnieje (tylko Eksplorator Windows tak to sobie tłumaczy) i nazywa się "Guest" albo coś jeszcze innego (najlepiej sprawdzić zewnętrznym programem). Co więcej, kompilator może mieć problem z przepchnięciem "ść" przez c-stringa.
Kacperjas komentarz 12 września 2013 Autor komentarz 12 września 2013 Przeniosłem pliczek do dysku D oraz zmieniłem linijkę na plik.open("D:\\form.txt", ios::in); Wszystko na marne... Również wyświetla "ERROR" Może to kwestia praw Gościa, albo środowisko programistyczne nie może się z czymś pogodzić? Używam Microsoft Visual C++ 2010 Express Jakie mogą być jeszcze inne czynniki? Mój system do Windows Vista :gobi: EDIT: Na koncie administratora to samo (na ścieżce D:\\form.txt)
Garrappachc komentarz 12 września 2013 komentarz 12 września 2013 Aha, i nie wiem jeszcze skąd pomysł, by używać podwójnych backslashy. Nie działa zwykłe plik.open("D:/form.txt", ios::in);
Kacperjas komentarz 12 września 2013 Autor komentarz 12 września 2013 (edytowane) Ehh... Niestety ten ERROR! [attachment=26448:ERROR!.png] EDIT: Na koncie Administratora EDIT2: Plik jest na pewno [attachment=26449:plik.png]
Garrappachc komentarz 12 września 2013 komentarz 12 września 2013 Przetestuj plik pod obecność flag goodbit, failbit, eofbit i badbit.
Kacperjas komentarz 12 września 2013 Autor komentarz 12 września 2013 (edytowane) Jestem trochę początkującym programistą :slabe: Więc upewniam się: Flagi to są metody, prawda? np.: if(plik.goodbit) cout<<"plik.goodbit=1"<<endl; else cout<<"plik.goodbit=0"<<endl EDIT: Oto co wyszło po napisaniu paru linijek kodu [attachment=26450:all_methods.png]
Garrappachc komentarz 12 września 2013 komentarz 12 września 2013 Nie, flagi to są wartości zmiennych. Metody mogą posłużyć do pobrania tych wartości. Poczytaj: http://www.cplusplus.com/reference/ios/ios/eof/ http://www.cplusplus.com/reference/ios/ios/fail/
Kacperjas komentarz 14 września 2013 Autor komentarz 14 września 2013 Mógłbyś pokazać na przykładzie? Z cplusplus.com zrozumiałem że jest to metoda dołączona do biblioteki iostream pod przestrzenią nazw std (std::ios::eof) :E Czyli moje rozumowanie że plik.eof() jest poprawne?
Garrappachc komentarz 15 września 2013 komentarz 15 września 2013 Tak, metoda fstream::eof() zwraca wartość flagi eofbit dla danego obiektu. Akurat mnie bardziej interesuje flaga failbit.
Kacperjas komentarz 16 września 2013 Autor komentarz 16 września 2013 Tak więc zrobiłem do wszystkich flag: if(wyb==2) { //POCZĄTEK WCZYTYWANIA fstream plik; plik.open("D:/form.txt", ios::in); if(plik.good()) getline(plik, Imie); else cout<<"plik.good=0"<<endl; if(plik.goodbit) cout<<"plik.goodbit=1"<<endl; else cout<<"plik.goodbit=0"<<endl; if(plik.failbit) cout<<"plik.failbit=1"<<endl; else cout<<"plik.failbit=0"<<endl; if(plik.eofbit) cout<<"plik.eofbit=1"<<endl; else cout<<"plik.eofbit=0"<<endl; if(plik.badbit) cout<<"plik.badbit=1"<<endl; else cout<<"plik.badbit=0"<<endl; //plik >> Imie >> Nazwisko >> Wiek >> email >> telefon; /*getline(plik, Imie); getline(plik, Nazwisko); getline(plik, Wiek); getline(plik, email); getline(plik, telefon);*/ plik.close(); //KONIEC WCZYTYWANIA // WYPISYWANIE INFORMACJI wys("Imie", Imie); wys("Nazwisko", Nazwisko); wys("Wiek", Wiek); wys("Email", email); wys("Telefon", telefon); } I wyświetliło [attachment=26495:post-97421-0-97771800-13790168911.png]
Rekomendowana odpowiedź Garrappachc komentarz 18 września 2013 Rekomendowana odpowiedź komentarz 18 września 2013 No przykro mi, coś jest nie tak z plikiem. Nie ma innej możliwości.
Kacperjas komentarz 18 września 2013 Autor komentarz 18 września 2013 Usunełem poprzedni plik oraz stworzyłem nowy i działa :gobi: Dziękuje! Uważam temat za zamknięty.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.