Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zmienne dynamiczne w odczycie z pliku

Ostatnio zmodyfikowano 2017-05-21 21:32
Autor Wiadomość
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 )

C/C++
int main()
{
    // ------------------- tablica wypelniona zerami ---
    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; // 1
            plik >> dwukropek;
           
            while(...) // do konca danego wiersza ( while(linia!="\n") ?)
            {
               
                int * E;
                E = new int;
                plik >>( * E );
                mac_sas[ V ][ E ] = 1; // 2
            }
        }
       
    }
   
    else
    {
        cout << "blad oczytu" << endl;
       
    }
}





P-161345
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ć.

C/C++
int * E;
E = new int;
plik >>( * E );
mac_sas[ V ][ E ] = 1; // 2
Po co ta zmienna dynamiczna?
P-161346
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?
P-161352
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


C/C++
#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' ) // 1
            {
                plik >> E;
                mac_sas[ V ][ E ] = 1;
                cout << "E: " << E << endl;
                char a;
                plik.get( a );
               
            }
           
        }
       
    }
   
    else
    {
        cout << "blad oczytu" << endl;
       
    }
}
P-161361
pekfos
» 2017-05-20 23:39:46
Ten kod nie ma żadnego sensu i nie jest zrobiony tak, jak ci napisałem.
P-161362
karambaHZP
» 2017-05-21 00:14:54
P-161363
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
P-161364
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..?
P-161365
« 1 » 2
  Strona 1 z 2 Następna strona