Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse
Skrevet (endret)

#include <iostream>
#include <conio.h>
#include <limits.h>
using namespace std;

int main ()
{
   int Tab [20], Nytab [20];
   int I, K, Min;
   
   //Inntasting av verdier:
   for (I=0; I<20; I++)
   {
   cout << "\nTast inn komponent nummer " << I+1 << ": ";
   cin >> Tab [I]; cin.ignore;
   }
   
   //Sortering:
   for (I=0; I<20; I++)
   {
   Min = 0;
   for (K=1; K<20; K++)
   if (Tab[K] < Tab [Min])
   Min = K;
   Nytab [I] = Tab [Min];
   Tab [Min] = INT_MAX;
   }
   
   //Utskrift:
   cout << "\n\nDen ordnede listen er:  ')";
   for (I=0; I<20; I++)
   cout << " " << Nytab[I];
   
   getche ();
   return 0;
}
   

 

På linje 15:

cin >> Tab [I]; cin.ignore;

får eg fram denne feilmeldingen:

Statement cannot resolve address of overload function.

Kva er feil?

Endret av gamma48
Skrevet (endret)

Det som er feil er at du har glemt parantesene i ignore, så det blir ikke noe kall på den medlemsfunksjonen.

Så bare legg på () i cin.ignore(). Så funker det.

Endret av prog master
Skrevet

Så klart, det gjekk nå.

Er det nokon som gidder å forklare meg kva som skjer i sorteringsdelen og kvifor?

Prøvde å forstå det i boka, men det gjekk litt i surr...

//Sortering:
   for (I=0; I<20; I++)
   {
   Min = 0;
   for (K=1; K<20; K++)
   if (Tab[K] < Tab [Min])
   Min = K;
   Nytab [I] = Tab [Min];
   Tab [Min] = INT_MAX;
   }
   
   //Utskrift:
   cout << "\n\nDen ordnede listen er: ";
   for (I=0; I<20; I++)
   cout << " " << Nytab[I];

Skrevet

Først så er det den feil der. K må begynne på 0 og ikke 1.

 

Det algortimen gjør er å lete gjennom lista etter laveste tall. Dette tallet plasseres først i en ny liste. I den gamle lista erstattes tallet med INT_MAX så man skal være sikker på at det ikke lenger er laveste tall. Så gjentar man dette, finner det tallet som nå er lavest, og plasserer det på plass nummer to i lista. Osv. osv.

  • 2 uker senere...
Skrevet (endret)

Når eg kjører denne kildefilen så får eg feilmelding opp på skjermen:

 

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
   char* Tpkr;
   Tpkr = "Hei gamle venn";
   cout << "\n" << Tpkr;
   cout << "\n" << Tpkr [1] << " " << Tpkr [5];
   Tpkr [2] = 'x';
   cout << "\n" << Tpkr;
   cout << "\n" << *Tpkr;
   
   getche ();
   return 0;
}

What's happening?!!

 

Debugger:

Det oppstod en access vialation (segmantation fault) i programmet ditt.

Linjen: Tpkr [2] = 'x';

 

What's happening?!!

Endret av gamma48
Skrevet (endret)

se kode postet nedenfor

 

Den koden din er rimelig tvilsom uansett, include iostream og conio.h? *grøss*

Endret av Nazgul
Skrevet
int main (int arcg, char **argv)
{
  char Tpkr[] = "Hei gamle venn";
  std::cout << Tpkr << std::endl;
  Tpkr[2] = 'z';
  std::cout << Tpkr << std::endl;
  
  std::cin.get();
  return 0;
}

Skrevet

Vitsen var jo at eg skulle bruke ein peker char* Tpkr og endre tegn nummer tre [2] på den måten.

Ikkje berre å få fram den utskriften.

Eg får ikkje tilgang til å endre den "addressen".

Skrevet (endret)

Hva er det egentlig min kode gjør som ikke gjør det du ønsker?

 

Det du prøver å gjøre er udefinert.

char* Tpkr = "Hei gamle venn";

 

Dette sier at Tpkr skal peke til en konstant streng, altså kan du ikke endre den.

Du kan endre hva Tpkr skal peke til, men du kan ikke endre strengen i seg selv. Dersom du skal gjøre det, må du gjøre som jeg har vist ovenfor.

Endret av Nazgul
Skrevet (endret)

Då er det berre boka mi som er utaddert.

Der står det at det går ann å bruke begge metodene...

 

Nytt eksempel:

 

#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
   int I;
   char* Tpkr = new char [10];
   cout << "Tast inn ein namnet ditt: ";
   cin.getline (Tpkr,10);
   cout << "\nDu heiter: ";
   for (I=0; (int)*Tpkr;)
   {
       cout << *(Tpkr++);
       I++;
   }
   cout << "\nBaklengs blir det: ";
   for (; I;)
   {
   I--;
   cout << *(Tpkr--);
   }
   
   getche ();
   return 0;
}

 

Når eg taster navnet mitt forsvinner alltid den første bokstaven når den skal telle baklengs...Går dette ann å hindre??

Altså avslutter løkke nr. 2 før den har fått skrevet det første teiknet (som skal komme sist). :roll:

Endret av gamma48
Skrevet
Det er vel av historiske årsaker. void main er tillatt i C, om jeg ikke tar helt feil...

5779604[/snapback]

Ok, men kvifor går det ikkje ann å skrive void main () i Bloodsheds Dev-C++, da.

Det står at den høyrer til C++ (også C da så klart).

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