Gå til innhold

Kan noen se litt på denne?


Anbefalte innlegg

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 av zirener
Lenke til kommentar
Videoannonse
Annonse

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 av Myubi
Lenke til kommentar

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 av zirener
Lenke til kommentar

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

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
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

{ 
   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 av zirener
Lenke til kommentar

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 av zirener
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...