Dead_Rabbit Skrevet 19. mai 2004 Del Skrevet 19. mai 2004 (endret) Heisan! Lurer på en liten ting her: case 3: { cout << "Tast inn navnet du vil søke etter: "; string navn1; cin >> navn1; cin.ignore(); for (int i=0;i<100;i++) { for (int k=0;k<100;k++) { if (navn1 == kordin[i][k].navn) { cout << navn1 << " har kordinat " << kordin[i][k].posisjon; goto hopp; } } } break; } Dette er koden. Hvorfor skriver den alltid ut "Navnet har kordinat 0" når jeg kjører denne biten? På forhånd, takk for alle svar ' Edit: Tok noen redigeringer å få koden nogen lunde oversiktlig. Endret 19. mai 2004 av zirener Lenke til kommentar
☀ ❄ Skrevet 19. mai 2004 Del Skrevet 19. mai 2004 (endret) Det ville vært fint å se definisjonen til kordin-typen og objektet ditt.. Tipper du har glemt å initialisere posisjonen. Edit: Bruker du goto én gang til denger jeg deg. Du burde dessuten bruke medlemsfunksjoner som såkalte "accessors", framfor public members. Eksempel: class my_class { int its_variable; public: int get_variable() const { return its_variable; } }; Endret 19. mai 2004 av Myubi Lenke til kommentar
Dead_Rabbit Skrevet 20. mai 2004 Forfatter Del Skrevet 20. mai 2004 (endret) Vet det ikke er noe bra å bruke hoppsetninger med mindre man må. Jeg fant ingen annen utvei så jeg brukte goto(please ikke deng meg) Det er sikkert en annen vei ut men, er ikke så god i C++ vet du. struct kordinat { int posisjon; string navn; }; Jeg er ikke så stø på klasser(har ikke fått jobbet så mye med det fordi jeg jo begynte fra starten på en annen bok, men jeg kommer snart til det(har nettopp begynt med struct). Edit: Har ikke intialisert posisjon nei, får prøve det da. Endret 20. mai 2004 av zirener Lenke til kommentar
☀ ❄ Skrevet 20. mai 2004 Del Skrevet 20. mai 2004 Jeg vet at det som ny programmerer virker veldig fristende med goto, så jeg har forsåvidt forståelse for det. Hvis du vil kan vi ta dette her privat, så kan jeg gi deg et forslag om hvordan du kan restrukturere koden din for å unngå goto. Send privat melding hvis du er interessert.. Lenke til kommentar
Steinbitglis Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 I stedet for goto hopp kan du skrive k= 100; i= 100; Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 Fikk hjelp fra Myubi så nå har jeg(eller han) fått fiksa det Lenke til kommentar
Toddy Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 Ikke verre enn å skrive break for å gå ut av løkka. Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 Nei jeg missforstod den litt jeg, så nå har jeg gjørt det sånn (trodde break bare hoppet ut av den løkka den var i jeg). Lenke til kommentar
A_N_K Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 (endret) Break bryter bare ut av den nærmeste løkka ja, å bryte ut av nøstede løkker er så vidt jeg vet nevnt som et mulig (om ikke anbefalt) bruksområde for goto av B. Stroustrup. Endret 21. mai 2004 av A_N_K Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 Nå begynner jeg å bli litt forvirra Lenke til kommentar
A_N_K Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 Det beste er å unngå goto, som allerede nevnt kan du sette tellevariablene til 100, så løkketesten evaluerer til false, og stoppe på den måten. Eller du kan ha en ekstra boolsk variabel du kan evaluere i den ytterste løkketesten, doLoop f.eks, når du ønsker å bryte ut kan du sette den til false og så bruke break for å bryte ut av den innerste løkka. Dvs. for (int i=0;i<100;i++) blir til for (int i=0;i<100 && doLoop;i++) Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 Takk for mange bra tips her nå. Har fått fiksa det ved hjelp av Myubi. Lenke til kommentar
Frank2004 Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 Det beste er å unngå goto, som allerede nevnt kan du sette tellevariablene til 100, så løkketesten evaluerer til false, og stoppe på den måten. Eller du kan ha en ekstra boolsk variabel du kan evaluere i den ytterste løkketesten, doLoop f.eks, når du ønsker å bryte ut kan du sette den til false og så bruke break for å bryte ut av den innerste løkka. Dvs. for (int i=0;i<100;i++) blir til for (int i=0;i<100 && doLoop;i++) Urk.. Legg inn en label etter den ytre loopen du, og bruk goto. Blir stygt å hoppe til et vilkårlig sted i koden, men for å bare komme ut av en nestet loop er vel goto en del klarere enn å endre variabler eller whatever.. Er jo som regel bedre å ordne koden slik at man slipper bruke goto, men i noen tilfeller er det beste løsning. Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 (endret) { bool coord_found = false; cout << "Tast inn navnet du vil søke etter: "; string navn1; cin >> navn1; for (int i=0;i<100;i++) { for (int k=0;k<100;k++) { if (navn1 == kordin[i][k].navn) { cout << navn1 << " har kordinat " << kordin[i][k].posisjon_x << " " << kordin[i][k].posisjon_y << endl; coord_found = true; } } } if (!coord_found) cout << "Fant ingen koordinater med navn " << navn1 << endl; break; } Sånn er koden nå(rettere sagt:den biten som jeg hadde problemer med.). Etter litt hjelp og sånn som jeg nevnte ovenfor. Edit: Redigerte så koden så litt bedre ut. Jeg har heller ikke tatt med inrykk(som jeg egentlig har på koden siden det ble så mye styr). Endret 21. mai 2004 av zirener Lenke til kommentar
A_N_K Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 Jeg kan ikke se at du har erstattet goto i koden? For å bryte ut av den ytre løkka kan du legge til coord_found i for-testen. Dvs. for (int i=0;i<100 && !coord_found;i++). Lenke til kommentar
Dead_Rabbit Skrevet 21. mai 2004 Forfatter Del Skrevet 21. mai 2004 (endret) Det behøves jo ingen goto der nå? Edit:Det at den går gjennom begge løkkene helt ut gjør jo bare at den bruker litt lengere tid? Gjør det ikke? Og så får man jo også skrevet ut hvis det er noen flere navn på samme koordinat(ble jeg fortalt, det ser man jo også). Endret 21. mai 2004 av zirener Lenke til kommentar
A_N_K Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 Ja, hvis meningen hele tiden var å søke videre etter et treff har selvfølgelig goto ingenting der å gjøre. Men hvorfor brukte du goto i utgangspunktet? Lenke til kommentar
Toddy Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 lag heller en enkel array isteden for en dobbel da kan du bruke break på riktig måte. Lenke til kommentar
☀ ❄ Skrevet 21. mai 2004 Del Skrevet 21. mai 2004 A_N_K: Fordi jeg ikke hadde pekt ut at det kanskje ville være greit å ta med evt. andre koordinater med samme navn Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå