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

Problem z odczytaniem pliku

Ostatnio zmodyfikowano 2010-03-31 14:04
Autor Wiadomość
bartek483
Temat założony przez niniejszego użytkownika
Problem z odczytaniem pliku
» 2010-03-28 18:45:16
Witamm

Odrazu przepraszam ze daje taki kawal kodu ; ) Program nie moze odczytac pliku .txt, choc nie wiem jaka jest tego przyczyna ;/ Plik .txt zawiera:

2010 600 bmw
1900 1500 renault

Podaje kod:

C/C++
#include <iostream>
#include <conio.h>
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

class Samochod
{
public:
    Samochod( const unsigned rok, const unsigned poj, const char * const nazwa )
        : rok_pr( rok )
        , pojemnosc( poj )
    {
        nazwa_prod = new char[ 32 ];
        strcpy( nazwa_prod, nazwa );
    }
   
    int odczyt_rok() const { return rok_pr; }
    int odczyt_poj() const { return pojemnosc; }
    const char * odczyt_naz() const { return nazwa_prod; }
   
    Samochod( const Samochod & X )
        : rok_pr( X.rok_pr )
        , pojemnosc( X.pojemnosc )
    {
        nazwa_prod = new char[ 32 ];
        strcpy( nazwa_prod, X.nazwa_prod );
    }
   
private:
    int rok_pr;
    int pojemnosc;
    char * nazwa_prod;
};
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
class Ubezpieczenia
{
public:
    Ubezpieczenia() { }
    void DodajSamochod( const Samochod & sam );
    void WczytajPlik( ifstream & plik );
    void PobierzPartie( int klasa, int ktory );
   
private:
    queue < Samochod > kolejka;
    queue < Samochod > kolejka2;
    queue < Samochod > kolejka3;
};

void Ubezpieczenia::DodajSamochod( const Samochod & sam )
{
    if( sam.odczyt_poj() < 700 )
         kolejka.push( sam );
    else if( sam.odczyt_poj() > 700 && sam.odczyt_poj() < 1600 )
         kolejka2.push( sam );
    else if( sam.odczyt_poj() > 1600 )
         kolejka3.push( sam );
   
}
//------------------------------------------------------------------------------
void Ubezpieczenia::WczytajPlik( ifstream & plik )
{
    int rk, pjmn;
    char nzw[ 32 ];
    plik.open( "auta.txt", ios::in );
   
    while( !plik.good() )
    {
        plik >> rk;
        plik >> pjmn;
        plik >> nzw;
       
        Samochod sam( rk, pjmn, nzw );
        DodajSamochod( sam );
    }
    plik.close();
}
//------------------------------------------------------------------------------
void Ubezpieczenia::PobierzPartie( int klasa, int ile )
{
    ile--;
   
    if( klasa == 1 )
    for( int i = 0; i < ile; ++i )
    {
        Samochod & temp = kolejka.front();
        cout << temp.odczyt_rok() << " " << temp.odczyt_poj() << " " << temp.odczyt_naz() << "\n";
        kolejka.pop();
    }
   
    else if( klasa == 2 )
    for( int i = 0; i < ile; ++i )
    {
        Samochod & temp2 = kolejka2.front();
        cout << temp2.odczyt_rok() << " " << temp2.odczyt_poj() << " " << temp2.odczyt_naz() << "\n";
        kolejka2.pop();
    }
   
    else if( klasa == 3 )
    for( int i = 0; i < ile; ++i )
    {
        Samochod & temp3 = kolejka3.front();
        cout << temp3.odczyt_rok() << " " << temp3.odczyt_poj() << " " << temp3.odczyt_naz() << "\n";
        kolejka3.pop();
    }
}
//------------------------------------------------------------------------------
int main( int argc, char ** argv )
{
    Ubezpieczenia pko;
    ifstream plik( "auta.txt" );
    pko.WczytajPlik( plik );
    pko.PobierzPartie( 2, 1 );
   
    _getch();
    return 0;
}

Za wszelka pomoc z gory dzieki :)
P-15548
malan
» 2010-03-28 19:22:52
Patrzysz tu: 16.3.1.
Patrzysz na to:
C/C++
while( !plik.good() )
{
    plik >> rk;
    plik >> pjmn;
    plik >> nzw;
   
    Samochod sam( rk, pjmn, nzw );
    DodajSamochod( sam );
}
Patrzysz tu: http://kursy.ddt.pl/?LessonId=110.
Patrzysz na to:
C/C++
while( !plik.good() )
{
    plik >> rk;
    plik >> pjmn;
    plik >> nzw;
   
    Samochod sam( rk, pjmn, nzw );
    DodajSamochod( sam );
}
Gdzie jest błąd? :)
P-15551
bartek483
Temat założony przez niniejszego użytkownika
» 2010-03-28 19:38:19
Chodzi o to: while( !plik.eof() )? ; >
Jezeli chodzi o to, to dalej nie odczytuje ;)
P-15552
malan
» 2010-03-28 19:40:13
A gdzie i jak to wstawiłeś?
P-15553
bartek483
Temat założony przez niniejszego użytkownika
» 2010-03-28 19:51:47
Tak dalem:

C/C++
void Ubezpieczenia::WczytajPlik( ifstream & plik )
{
    int rk, pjmn;
    char nzw[ 32 ];
   
    plik.open( "auta.txt", ios::in );
   
    while( !plik.eof() )
    {
        plik >> rk;
        plik >> pjmn;
        plik >> nzw;
       
        Samochod sam( rk, pjmn, nzw );
        DodajSamochod( sam );
    }
    plik.close();
}
P-15554
malan
» 2010-03-28 20:18:51
No to szukamy błędu :).

1. Sprawdź, czy w pliku są dane.
2.
C/C++
plik.open( "auta.txt", ios::in );
if( plik.good() )
{
    while( !plik.eof() )
    {
        plik >> rk;
        plik >> pjmn;
        plik >> nzw;
       
        std::cout << rk << " " << pjmn << " " << nzw << std::endl;
       
        Samochod sam( rk, pjmn, nzw );
        DodajSamochod( sam );
    }
} else
{
    std::cout << "Blad pliku!";
    std::cin.sync();
    std::cin.get();
}
3. Skompiluje jeszcze u siebie - może coś wyłapię.
P-15557
bartek483
Temat założony przez niniejszego użytkownika
» 2010-03-28 20:21:47
"Blad pliku." ;]

W pliku sa dane.

Ktos ma jakis pomysl dlaczego nie dziala?
P-15558
Elaine
» 2010-03-28 22:11:25
Mhm, kolejny, któremu ukradli debugger?
P-15567
« 1 » 2 3 4
  Strona 1 z 4 Następna strona