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

C++ porównanie dwóch zmiennych typu string

Ostatnio zmodyfikowano 2014-09-19 05:27
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
C++ porównanie dwóch zmiennych typu string
» 2014-09-17 19:43:56
Witam

Fragment kodu:
C/C++
//Sprawdzenie czy występuje ten sam klient w bazie.
int i = 0;

string klientBaza;
ifstream Klienci1;
Klienci1.open( path.c_str() );
if( Klienci1.is_open() )
while( !( Klienci1.eof() ) )
{
    getline( cin, klientBaza );
   
    if( klientBaza.compare( edtNazwa->Text.c_str() ) == 0 )
    {
        ShowMessage( "Ten klient jest już w bazie. Wprowadź nowego lub wyjdź!!!" );
        //edtNazwa->Text = "";
        //edtNazwa->SetFocus();
        break;
    }
   
    else
         Klient->nazwaKlient = edtNazwa->Text;
   
    i++;
}
else
     ShowMessage( "Błąd otwarcia pliku!!!." );

Label8->Caption = IntToStr( i );
Klienci1.close();

Powyższy fragment kodu powoduje,że program zamiera tak jakby pętla while nie mogła się skończyć, a w pliku z którego sczytuje linie znajduje się kilkanaście lini tekstu.
Po pobraniu z pliku stringa do zmiennej klientbaza  i wpisaniu do kontrolki edit stringa(edtNazwa->Text) oba stringi są porównywane.
Niestety gdzieś jest błąd, którego nie mogę wyłowić
Pozdrawiam

P-117123
Jacob99
» 2014-09-17 19:46:07
Może będziesz tak łaskawy i pokażesz cały kod dotyczący błędu?
P-117125
Monika90
» 2014-09-17 20:13:47
C/C++
getline( cin, klientBaza );
to próbuje wczytywać z cin a nie z pliku
P-117126
Kefirek
Temat założony przez niniejszego użytkownika
» 2014-09-17 20:14:46
Program się kompiluje i startuje normalnie z ty że po wpisaniu stringa do edtNazwa i rozpoczęcia się funkcji z powyżej podanym kodzie program zamiera nie reaguje.
Cały kod przedstawiłem.
Pozdrawiam
P-117127
Kefirek
Temat założony przez niniejszego użytkownika
» 2014-09-17 20:17:05
No właśnie wiedziałem, że gdzieś robię prosty błąd - moje przeoczenie - Dzięki Monika
Pozdrawiam
P-117128
Monika90
» 2014-09-17 20:26:59
I po raz chyba 10 muszę napisać, że to nie jest dobry sposób wczytywania linii tekstu z pliku:
C/C++
while( !plik.eof() )
{
    getline( plik, linia );
}

to się robi tak
C/C++
while( getline( plik, linia ) )
{
   
}

A przy okazji, jakiej wersji Borland C++ Builder używasz?
P-117129
Kefirek
Temat założony przez niniejszego użytkownika
» 2014-09-18 18:21:18
Sorry, Monika że tak późno odpowiadam:
Dlaczego to nie jest dobry sposób odczytywania lini z pliku - chodzi o warunek w pętli?
Używam Builder 6 wersja enterprise
Pozdrawiam
P-117158
Monika90
» 2014-09-19 00:12:22
Podczas odczytu może się zdarzyć błąd, np. ktoś odłączy dysk sieciowy, wtedy koniec pliku nigdy nie będzie osiągnięty, twoja pętla będzie się wykonywać w nieskończoność i program się zawiesi. To jest mało prawdopodobne zdarzenie, ale nawet gdy do niego nie dojdzie i wczytywanie szczęśliwe dojdzie do końca pliku, to i tak nie jest dobrze, bo Twoja pętla może się wykonać jeszcze jeden raz, tak jakby na końcu pliku była dodatkowa pusta linia. U Ciebie to pewnie nie będzie miało znaczenia, ale w innych sytuacjach może być problemem.
P-117172
« 1 » 2
  Strona 1 z 2 Następna strona