Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

21

07.08.2007, 13:24

Wenn es genau 5 Einträge sein sollen, dann mach es z.b. so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    DIR* handle;
    struct dirent* entry;

    vector< string > directory_list(5);
    int count=0

    handle = opendir( "Saves\\" );

    if ( !handle )
    {
        cerr << "Error: Verzeichnis konnte nicht gefunden werden" << std::endl;
        return -1;
    }


    while ( 0 != (entry = readdir( handle ) ) && count < 5)
    {

        if(strcmp(entry->d_name, ".") == 0 ||
        strcmp(entry->d_name, "..") == 0)
        continue;
        directory_list[count++]= entry->d_name;
    } 

// ...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

22

07.08.2007, 13:35

Wenn du ohnehin alle Einträge nacheinander abhandelst nimm doch einen Iterator:

C-/C++-Quelltext

1
2
3
4
5
6
std::vector< std::string >::iterator it( directory_list.begin() );

for ( ; it != directory_list.end(); ++it )
{
    std::cout << ( *it ) << std::endl;
}


Wenn du unbedingt per Index auf die Einträge zugreifen willst dann nimm die Methode at und fang die Ausnahme std::out_of_range ab.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
try
{
    std::cout << directory_list.at( 10 ); 
}
catch ( std::out_of_range& e )
{
    std::cout << "Fehler" << std::endl;
}


Diese Methode wirft eine Ausnahme vom Typ std::out_of_range wenn der Index den Wertbereich vom vector überschreitet, der Operator[] tut das nicht!

Wenn du unbedingt den Operator[] verwenden willst dann prüfe vorher ob der Index gültig ist, also < directory_list.size(). Der Operator[] wirft keine Exception vom Typ std::out_of_range!

Achja:

C-/C++-Quelltext

1
while ( 0 != (entry = readdir( handle ) ))


Die Abfrage auf 0 ist unnötig:

C-/C++-Quelltext

1
while ( entry = readdir( handle ) )


Das reicht vollkommen da C++ Pointer direkt in den Datentyp bool konvertiert.
@D13_Dreinig

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

23

07.08.2007, 13:39

Das wollte ich auch gerade schreiben david^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

24

07.08.2007, 13:41

Zitat von »"storage"«

Das wollte ich auch gerade schreiben david^^


Lass dich nicht davon abhalten! :P
@D13_Dreinig

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

25

07.08.2007, 13:57

EDDDDDITTTT : Sorry ignor was übersehen ... THX werde alles testen .. =)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

26

07.08.2007, 14:39

jetzt weiss ich, wie ihr euch fühlt, wenn ich dumme fragen stelle.....


Socke...

Toa: am besten du fängst den thread noch mal ganz von vorne an.
Und dann schreibst du denn quellcode ab, und tust so, als würdest du ihn verstehen.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

27

07.08.2007, 14:57

o0 danke für das Kompliment ... Is einfach meine Art das ich manchmal auf der langen Leitung steh :/ ..

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

28

07.08.2007, 15:00

Zitat von »"Toa"«

o0 danke für das Kompliment ... Is einfach meine Art das ich manchmal auf der langen Leitung steh :/ ..


Socke kennt sich damit aus, es war nur gut von ihm gemeint! :lol:
@D13_Dreinig

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

29

07.08.2007, 16:11

Ahso okay sorry :lol: dachte nur es ist ironische gemeint bei seiner Post anzahl

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

30

07.08.2007, 16:22

Jo, jetzt weißt du ja wie selbige zustande kam!
@D13_Dreinig

Werbeanzeige