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

C++ nie można wczytać danych do struktury

Ostatnio zmodyfikowano 2013-01-19 12:59
Autor Wiadomość
przemo098
Temat założony przez niniejszego użytkownika
C++ nie można wczytać danych do struktury
» 2013-01-19 10:29:57
W skrócie
Mam strukture:

C/C++
struct komorka
{
    char marka[ 10 ];
    char typ[ 10 ];
    char model[ 20 ];
    char imei[ 15 ];
   
};

Tutaj wskaźnik
C/C++
komorka * wsko;
wsko = new komorka[ 100 ];

I teraz problem:
getline( plik,( wsk + i )->typ );

Ale jak chcę wczytać do struktury dane z pliku wyskakuje:
 no matching function for call to 'getline(std::fstream&, char [10])'|
Jak bym to wczytywał to normalnej zmiennej typu string to działa ale jak dołączona jest struktura to niestety nie :/

tutaj wrzucam cały program: problem jest w 35 linijce : /
C/C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <fstream>

using namespace std;

struct komorka
{
    char marka[ 10 ];
    char typ[ 10 ]; // smartfon lub zwykła
    char model[ 20 ];
    char imei[ 15 ];
   
};

int odczyt_danych( komorka * wsk, int i )
{
    fstream plik( "plik.txt", std::ios::in ); // odczyt danych
   
    string dane[ 100 ];
    char tab[ 100 ];
   
    for( int i = 0; plik.fail() == 0 && i < 100; i++ )
    {
        getline( plik, dane[ i ] );
        getline( plik,( wsk + i )->typ );
        getline( plik,( wsk + i )->model );
        getline( plik,( wsk + i )->imei );
       
    }
};

void dodaj_kom( komorka * wsk, int i )
{
   
    do {
        system( "cls" );
        cout << "\nPodaj marke Komorki: ";
        cin >>( wsk + i )->marka;
    } while( strlen(( wsk + i )->marka ) > 10 );
   
    cout << "Podaj typ: ";
    cin >>( wsk + i )->typ;
   
    podaj_imei:
   
   
    do {
        cout << "Podaj imei telefonu: ";
        cin >>( wsk + i )->imei;
        if( strlen(( wsk + i )->imei ) != 15 ) cout << "\nPodany Imei jest za krotki prosze podac dluzszy (15 cyfrowy)";
       
    } while( strlen(( wsk + i )->imei ) != 15 );
   
   
    for( int a = 0; a < 14; a++ )
    {
        if( isdigit(( wsk + i )->imei[ a ] ) == 0 ) { goto podaj_imei; cout << "Imei sklada sie tylko i wylacznie z cyfr !!"; }
    }
    cin.sync();
   
    do {
        cout << "Podaj model telefonu: ";
        cin.getline(( wsk + i )->model, 20 );
    } while( strlen(( wsk + i )->model ) > 20 );
   
   
   
    cout << "\nKomorka zostala umieszczona w bazie.";
    cout << "\nNacisniecie dowolnego klawisza spowoduje powrot do menu glownego.";
    cin.sync();
   
    getch();
   
};


void wyszukiwanie( komorka * wsk, int dodaj )
{
    system( "cls" );
    cout << "Podaj Marke / Imei / typ lub model telefonu:\n";
    string fraza;
    cin >> fraza;
   
   
    for( int i = 0; i < dodaj; i++ )
    {
        if(( wsk + i )->imei == fraza ||( wsk + i )->marka == fraza ||( wsk + i )->typ == fraza )
        {
            cout << "Osoba nr: " << i + 1 << "\n\n";
            cout << "Marka:" <<( wsk + i )->marka << "\n";
            cout << "Typ: " <<( wsk + i )->typ << "\n";
            cout << "imei:" <<( wsk + i )->imei << "\n";
            cout << "Model:" <<( wsk + i )->model << "\n";
           
           
        }
    }
   
};


void wyswietl( komorka * wsk, int dodaj )
{
    system( "cls" );
    cout << "W bazie znajduje sie nastepujaca liczba osob: " << dodaj << "\n";
    for( int i = 0; i < dodaj; i++ )
    {
        cout << "Osoba nr: " << i + 1 << "\n";
        cout << "Marka:" <<( wsk + i )->marka << "\n";
        cout << "Typ: " <<( wsk + i )->typ << "\n";
        cout << "Imei:" <<( wsk + i )->imei << "\n";
        cout << "Model:" <<( wsk + i )->model << "\n";
       
       
    }
    cout << "Nacisniecie dowolnego klawisza spowoduje powrot do menu glownego.";
    getch();
   
};


void deszyfracja( komorka * wsk, int dodaj )
{
    system( "cls" );
   
    char imei_deszyfrowane[ 15 ];
   
    if( strlen(( wsk )->typ ) == 0 && strlen(( wsk )->model ) == 0 )
    { cout << "Baza jest pusta prosze ja uzupelnic..";
        getch();
    }
   
    cout << "\n\nPodaj Imei:";
    cin >> imei_deszyfrowane;
    for( int i = 0; i < dodaj; i++ )
    {
        if( strncmp( imei_deszyfrowane,( wsk + i )->imei, 8 ) == 0 )
       
        { cout << "Model:" <<( wsk + i )->model << "\n" << "Marka:" <<( wsk + i )->marka;
            break; }
        if( i == dodaj - 1 ) { cout << "W baza nie posiada takiego Imei, prosze sprawdzic poprawnosc Imei badz dodac go do bazy\n\n\n\nAle podam ci marke: "; }
       
       
        if( imei_deszyfrowane[ 6 ] == '3' && imei_deszyfrowane[ 7 ] == '0' ) { cout << "Jest to Sony Ericson"; }
        if( imei_deszyfrowane[ 6 ] == '1' && imei_deszyfrowane[ 7 ] == '0' ) { cout << "Jest to Nokia"; }
        if( imei_deszyfrowane[ 6 ] == '4' && imei_deszyfrowane[ 7 ] == '0' ) { cout << "Jest to Motorola"; }
        if( imei_deszyfrowane[ 6 ] == '6' && imei_deszyfrowane[ 7 ] == '0' ) { cout << "Jest to Alcatel"; }
       
    }
   
    cout << "Nacisniecie dowolnego klawisza spowoduje powrot do menu glownego.";
    getch();
   
};



int main()
{
    komorka * wsko;
    wsko = new komorka[ 100 ];
   
   
   
    int dodaj = 0, wybor, i;
    int b;
    char szukaj;
   
    odczyt_danych( wsko, dodaj );
   
    cout << "Co chcesz zrobic ??";
    // szukanie nia
   
    do
    {
        cout << "\n\n[1] - dodaj komorke \n";
        cout << "[2] - wyszukaj komorke \n";
        cout << "[3] - wyswietl baze komorek\n";
        cout << "[4] - deszyfracja imei \n";
        cout << "[5] - wyjscie z programu \n";
       
        // siwtch
        cin >> b;
       
        switch( b )
        {
        case 1:
            dodaj_kom( wsko, dodaj );
            dodaj++;
            break;
           
        case 2:
            wyszukiwanie( wsko, dodaj );
            break;
           
        case 3:
            wyswietl( wsko, dodaj );
            break;
           
        case 4:
            deszyfracja( wsko, dodaj );
            break;
           
           
        case 5:
           
            cout << "\n\nNastapil koniec programu";
            break;
           
           
        default:
            cout << "Blad, podano nieprawidlowa wartosc";
        }
    } while( b != 5 );
   
    return 0;
}


// Specjalne podzękowania dla Adam Frankowski !!
P-74376
m4tx
» 2013-01-19 10:33:51
Getline'a się używa nieco inaczej niż Ty chcesz to uczynić:
http://www.cplusplus.com/reference/istream/istream/getline/
P-74377
przemo098
Temat założony przez niniejszego użytkownika
» 2013-01-19 12:59:27
Widać wyraziłem się za mało starannie :(, to jest Czytanie z Pliku..  problem rozwiązałem tak:
C/C++
getline( plik, dane );

p =& dane[ 0 ];
strcpy(( wsk + i )->marka, p );

Dobrze zrobiłem ? Czy da się to jakoś łatwiej obejść ?
P-74387
« 1 »
  Strona 1 z 1