mikewazowski Temat założony przez niniejszego użytkownika |
zmienne dynamiczne w odczycie z pliku » 2017-05-20 16:33:19 mam plik wejściowy który wygląda następująco: | 1: 2 23 3 | | 2: 1 13 | | 3: 126 | | ... ... | | V: E1 E2 ...| w każdym wierszu jest różna ilość liczb E, więc tworze zmienne dynamiczne które następnie służą jako indeksy w tablicy 1. ) mam problem z warunkiem który pozwoli odczytywać zmienne do końca linii a następnie wrócić do linii 1 i zacząć odczyt od nowa dla kolejnej linii 2. ) drugi problem to użycie zmiennej dynamicznej jako indeks tablicy ( w linii 2 ) int main() { int ** mac_sas = new int *[ MAX ]; for( int i = 0; i < MAX; i++ ) { mac_sas[ i ] = new int[ MAX ]; } for( int i = 0; i < MAX; i++ ) { for( int j = 0; j < MAX; j++ ) { mac_sas[ i ][ j ] = 0; } } fstream plik( "dane.txt" ); int V; char dwukropek; string linia; if( plik ) { while( !plik.eof() ) { plik >> V; plik >> dwukropek; while(...) { int * E; E = new int; plik >>( * E ); mac_sas[ V ][ E ] = 1; } } } else { cout << "blad oczytu" << endl; } }
|
|
pekfos |
» 2017-05-20 16:42:21 Jeden znak zawsze możesz ungetnąć, więc wczytuj jeden znak, odkładaj go na miejsce i na podstawie wartości, jaką odczytałeś, decyduj co zrobić. Spacje ignoruj, jeśli cyfra, wczytaj liczbę. Z przejściem do nowej linii chyba wiesz, co zrobić. int * E; E = new int; plik >>( * E ); mac_sas[ V ][ E ] = 1;
|
Po co ta zmienna dynamiczna? |
|
mikewazowski Temat założony przez niniejszego użytkownika |
» 2017-05-20 18:05:31 Czyli polecasz użyć funkcji get()? czy twoja metoda będzie dobra jeśli w linii jest 200-300 liczb 1,2 lub 3 cyfrowych? |
|
mikewazowski Temat założony przez niniejszego użytkownika |
znak nowej linii » 2017-05-20 22:51:21 kod zmodyfikowałam, ale nadal mam problem z odczytaniem znaku nowej linii. Chciałabym używać >> zamiast sprawdzać znak po znaku ze względu na dużą ilość liczb w pliku #include <iostream> #include <fstream> using namespace std; #define MAX 10000 int main() { fstream plik( "dane.txt" ); int V; char dwukropek; int E; string linia; if( plik ) { while( !plik.eof() ) { plik >> V; cout << "V: " << V << endl; plik >> dwukropek; cout << dwukropek << endl; char a; while( a != '\n' || a != '\r\n' || a != '0x0D' || a != '0x0A' ) { plik >> E; mac_sas[ V ][ E ] = 1; cout << "E: " << E << endl; char a; plik.get( a ); } } } else { cout << "blad oczytu" << endl; } }
|
|
pekfos |
» 2017-05-20 23:39:46 Ten kod nie ma żadnego sensu i nie jest zrobiony tak, jak ci napisałem. |
|
karambaHZP |
» 2017-05-21 00:14:54 |
|
mikewazowski Temat założony przez niniejszego użytkownika |
» 2017-05-21 00:20:23 nie jest zrobiony tak jak napisales bo nie do końca rozumiem "więc wczytuj jeden znak, odkładaj go na miejsce" - kompletnie nie mam pomysłu co dokładnie mam zrobić, " Z przejściem do nowej linii chyba wiesz, co zrobić." - nie wiem, prosiłabym o dokładniejsze wskazówki |
|
pekfos |
» 2017-05-21 01:09:48 nie jest zrobiony tak jak napisales bo nie do końca rozumiem "więc wczytuj jeden znak, odkładaj go na miejsce" |
Jeden znak zawsze możesz ungetnąć, więc wczytuj jeden znak, odkładaj go na miejsce | http://en.cppreference.com/w/cpp/io/basic_istream/unget" Z przejściem do nowej linii chyba wiesz, co zrobić." - nie wiem, prosiłabym o dokładniejsze wskazówki |
Uhhh.. to co miał robić twój program..? |
|
« 1 » 2 |