Avatar billede Swift Praktikant
12. september 2003 - 10:59 Der er 4 kommentarer og
2 løsninger

Array af structs - Hvordan undersøges det om der er flere poster

Jeg modtager et array af SDataSource structs - og jeg kender ikke længden på arrayet.
Jeg skal have udskrivet alt data fra arrayet. Men jeg må jo ikke udskrive mere data end der er.
Hvordan undersøges det lettest om det er en gyldig struct på en bestemt plads i arrayet ??


I min .HPP fil:
struct SDataSource
{
    char name[19+1];
    enum DataSourceType{ GAUGE, COUNTER, DERIVE, ABSOLUTE };
    DataSourceType dataSourceType;
    int heartbeat;
    unsigned int minValue;
    unsigned int maxValue;
};


I min .CPP fil:
while( der er flere poster i arrayet )
{
cout << dataSources[i].name;
cout << dataSources[i].maxValue;
cout << dataSources[i].minValue;
}
Avatar billede arne_v Ekspert
12. september 2003 - 11:03 #1
Det kan du ikke !

Du er nødt til enten at sende antal med.

Ellee have en konvention om at sidste element består af ene nul bytes eller
lignende.
Avatar billede arne_v Ekspert
12. september 2003 - 11:04 #2
Eller erstatte det simple array med f.eks. en STL vektor.
Avatar billede stefanfuglsang Juniormester
12. september 2003 - 12:54 #3
Jeg er enig i ovenstående, men hvis ikke du selv bestemmer formatet på datatypen, så må man lave noget grimt kode, hvor du validerer name og dataSourceType mod forventede værdier og så læser ud over arrayet. Du skal måske pakke en sådan kode ind i en try/catch-blok:
try {
cout << osv.
} catch (...) {}
for at fange exceptions. Opstår en exception, kan du være (næsten) sikker på at du har læst for langt ((...) fanger dog alle exceptions - det kan nok gøres bedre).

mvh Stefan
Avatar billede arne_v Ekspert
12. september 2003 - 12:58 #4
stefan>

Det er ikke nogen god løsning - der er ingen garanti for at den
metode vil gætte rigtigt.

Den issue skal flagges og løses ordentligt.
Avatar billede arne_v Ekspert
12. september 2003 - 13:06 #5
Metoden med at ligge et element ind med ene nul bytes bruges
en del.
Avatar billede Swift Praktikant
15. september 2003 - 22:04 #6
Jeg brugte en list hvor jeg pusher og popper elementer!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester