[C++] używanie danych wprowadzonych z pliku
Ostatnio zmodyfikowano 2009-10-04 18:08
szkuner Temat założony przez niniejszego użytkownika |
[C++] używanie danych wprowadzonych z pliku » 2009-10-04 00:35:09 Napisałem coś takiego i teraz niewiem jak mam połączyć wczytane dane z pliku do zmiennych w strukturze zeby program mógł z nich kożystać. #include <iostream> #include <string> using namespace std; const int size = 60; struct trzd { string nazwisko; double dotacja; };
int main() { int main() { char filename[ size ]; ifstream infile; cout << "Podaj nazwe pliku:"; cin.getline( filename, size ); infile.open( filename ); if( !infile.is_open() ) { cout << "Otwarcie pliku bland ogolny" << filename << "\n"; cout << "program zostanie zakonczony\n"; exit( EXIT_FAILURE ); } string dane; int licz = 0; infile >> dane; while( infile.good() ) { ++licz; infile >> dane; } if( infile.eof() ) cout << "koniec pliku\n"; else if( infile.fail() ) cout << "Wczytywanie pkiku przerwane\n"; else cout << "Wczytywanie bład nie znany\n"; if( licz == 0 ) cout << "nie przetwożono zadnych danych\n"; else { cout << "Wcyztano" << licz << "znaków"; } infile.close(); cout << dane << "\n"; int i = 0; int ilosc_osob; cout << "Towarzystwo na rzecz Zachowania dobrych Wplywow:\n"; cout << "Podaj ile chcesz wprowadzic osob:"; cin >> ilosc_osob; trzd * sponsor = new trzd[ ilosc_osob ]; for( i = 0; i < ilosc_osob; i++ ) { cout << "Podaj Nazwisko Wplacajacego:\n"; cin >> sponsor[ i ].nazwisko; cout << "Podaj kwote jaka wplaciles\n"; cin >> sponsor[ i ].dotacja; } for( i = 0; i < ilosc_osob; i++ ) { if( sponsor[ i ].nazwisko.length() <= 3 ) { cout << "brak"; } if( sponsor[ i ].dotacja > 10000 ) { cout << "LISTA NASZYCH WSPANIALYCH SPONSOROW:\n"; cout << sponsor[ i ].nazwisko << "-----" << sponsor[ i ].dotacja << endl; } else { cout << "NASI SPONSORZY:\n"; cout << sponsor[ i ].nazwisko << "-----" << sponsor[ i ].dotacja << endl; } } delete[] sponsor; return 0; }
|
|
szkuner Temat założony przez niniejszego użytkownika |
» 2009-10-04 15:38:39 Stworzyłem coś takiego wydaje mi sie rozwiązaniem dobry używałem zapisu do plików tak jak bym używał cin i cout. Tylko mam problem nie chce mi czytać tego pliku txt co stworzyłem notaniku. Jak ma to naprawić #include <iostream> #include <fstream> #include <cstdlib>
using namespace std; const int size = 60;
struct twrz { string nazwisko; double dotacja; };
int main() { string filename; char temp[ 40 ]; int liczba = 0; int sponsor = 0; ifstream n_file; cout << "Wprowadz nazwe pliku:"; getline( cin, filename ); n_file.open( filename.c_str() ); if( !n_file.is_open() ) { cout << "Otwarcie pliku:" << filename << "nieudane\n"; cout << "blad ogolny program zostanie zakonczony\n"; exit( EXIT_FAILURE ); } while( n_file.good() && n_file.getline( temp, 20 ) ) ++liczba; if( liczba == 0 ) { cout << "W tym pliku niema zadnych danych"; system( "pause" ); exit( EXIT_FAILURE ); } sponsor = liczba; cout << "Liczba sponsorow:" << sponsor << endl; twrz * spons = new twrz[ sponsor ]; n_file.clear(); for( int a = 0; a > sponsor; a++ ) { cout << "Wczytano#:" << a + 1 << "\n"; cout << "Nazwisko:" << endl; getline( n_file, spons[ a ].nazwisko ); n_file >> spons[ a ].dotacja; n_file.ignore(); cout << spons[ a ].nazwisko << endl; cout << "Sponsorzy: " << spons[ a ].dotacja; } if( n_file.eof() ) cout << "koniec pliku.\n"; else if( n_file.fail() ) cout << "Blad odczytu z pliku.\n"; else cout << "Blad nie oznakowany.\n"; liczba = 0; cout << "\nNasi sponsorzy \n"; for( int i = 0; i < sponsor; i++ ) { if( 10000 <= spons[ i ].dotacja ) { cout << spons[ i ].nazwisko << endl; liczba++; } } if( liczba == 0 ) { cout << "BRAK\n"; } liczba = 0; cout << "\nNAsi wspaniali sponsorzy: \n"; for( int i = 0; i < sponsor; i++ ) { if( 10000 > spons[ i ].dotacja ) { cout << spons[ i ].nazwisko << endl; liczba++; } } if( liczba == 0 ) cout << "BRAK\n"; delete[] spons; system( "pause" ); return 0; }
|
|
Thud |
» 2009-10-04 17:34:45 Z tego co patrzę, to pliki nie mogą się otworzyć, bo nie istnieją. "Domyślne" biblioteki i/o nie obsługują tego, jednakże istnieją także w bibliotece standardowej nagłówki, w których znajdują się funkcja umożliwiające tworzenie plików. Popatrz na mode, tam masz rozwiązanie, jednakże wystarczy że stworzysz plik by cstdio, a później wyłączysz "transmisje" z programu do pliku by cstdio i przejdziesz na podstawowe i/o. |
|
szkuner Temat założony przez niniejszego użytkownika |
» 2009-10-04 18:08:17 Dzieki za odpowiedź udało mi się już wczytać plik tą metodą teraz jednak program wogóle nie wyświetla mi pobranych z pliku stringów chociaż liczby wyswietla format w pliku txt wyglada tak: 4 //liczba sponsorów peter hond 10000 //dotacja harakiri demode // nazwisko 222222 oczywiście tego po ukośnikach nie mam w pliku:) Żeby go wczytać musiałem umiescić go w tym samym folderze co był program :p #include <iostream> #include <fstream> #include <cstdlib>
using namespace std; const int size = 60;
struct twrz { string nazwisko; double dotacja; };
int main() { string filename; char temp[ 40 ]; int liczba = 0; int sponsor = 0; ifstream n_file; cout << "Wprowadz nazwe pliku:"; getline( cin, filename ); n_file.open( filename.c_str() ); if( !n_file.is_open() ) { cout << "Otwarcie pliku:" << filename << "nieudane\n"; cout << "blad ogolny program zostanie zakonczony\n"; exit( EXIT_FAILURE ); } while( n_file.good() && n_file.getline( temp, 20 ) ) ++liczba; if( liczba == 0 ) { cout << "W tym pliku niema zadnych danych"; system( "pause" ); exit( EXIT_FAILURE ); } sponsor = liczba / 2; cout << "Liczba sponsorow:\n" << sponsor << endl; twrz * spons = new twrz[ sponsor ]; n_file.clear(); n_file.seekg( 0, ios::beg ); for( int a = 0; a < sponsor; a++ ) { cout << "Wczytano#:" << a + 1 << "\n"; cout << "Nazwisko:\n" << endl; getline( n_file, spons[ a ].nazwisko ); n_file >> spons[ a ].dotacja; n_file.ignore(); cout << spons[ a ].nazwisko << endl; cout << "Sponsorzy:\n" << spons[ a ].dotacja; } if( n_file.eof() ) cout << "koniec pliku.\n"; else if( n_file.fail() ) cout << "Blad odczytu z pliku.\n"; else cout << "Blad nie oznakowany.\n"; liczba = 0; cout << "\nNasi sponsorzy \n"; for( int i = 0; i < sponsor; i++ ) { if( 10000 <= spons[ i ].dotacja ) { cout << spons[ i ].nazwisko << endl; liczba++; } } if( liczba == 0 ) { cout << "BRAK\n"; } liczba = 0; cout << "\nNAsi wspaniali sponsorzy: \n"; for( int i = 0; i < sponsor; i++ ) { if( 10000 > spons[ i ].dotacja ) { cout << spons[ i ].nazwisko << endl; liczba++; } } if( liczba == 0 ) cout << "BRAK\n"; delete[] spons; system( "pause" ); return 0; }
|
|
« 1 » |