• 1
  • 2
2017-07-26, 00:46
  #1
Medlem
Tja ska frska gra ett program dr man fr mata in ett namn och personnummer i en array men nr jag gr det p det hr sttet (koden som r kommenterad bort //) s krashar programmet. Nr jag gr det p det nya sttet (den nuvarande koden) s krashar programmet nr jag ska ska upp personnumret i slutet av programmet. (Det krashar inte om jag tar ngon av personerna som redan r skapta). Ngon som vet vad jag gr fel?

Kod:
#include <iostream>

using namespace std;

class 
Person
{
public:
    
charname;
    
int personnummer;

    
void SetInfo(char_nameint _personnummer)
    {
        
name _name;
        
personnummer _personnummer;
    }

};

int LinearSearch(PersonpersonArrayint key)
{
    for (
int i 011i++)
    {
        if (
personArray[i].personnummer == key)
            return 
i;
    }
    return -
1//Personen hittades ej
}

int main()
{

    
int listsize;
    
int listnumber;
    
charnameperson;
    
int personsnumber;

    
listsize 11;
    
listnumber 10;

    
//KOD SOM TOGS BORT FR LOOPEN DR SWITCH CASE 1 GR ATT MAN LGGER TILL NAMN- 
    //OCH PERSONNUMMER
    //listsize = 10;
    //listsize++;
    //listnumber = 9;
    //listnumber++;

    
charKalle;

    
nameperson Kalle;
    
personsnumber 930313;

    
//KOD SOM TOGS BORT SOM SKA VA HR P NGOT STT
    //cout << "Skriv namnet du vill lgga till: ";
    //cin >> nameperson;
    //cout << "Skriv personens personnummer;
    //cin >> personsnumber


    
Person myList[listsize];
    
myList[0].SetInfo("Ander"220212);
    
myList[1].SetInfo("Bosse"330313);
    
myList[2].SetInfo("Calle"440414);
    
myList[3].SetInfo("Douglas"550515);
    
myList[4].SetInfo("Erik"660616);
    
myList[5].SetInfo("Fredrik"770717);
    
myList[6].SetInfo("Gustaf"880818);
    
myList[7].SetInfo("Henrik"880919);
    
myList[8].SetInfo("Isak"881020);
    
myList[9].SetInfo("John"920212);
    
myList[listnumber].SetInfo(namepersonpersonsnumber);

    
int number;
    
cout << " Skriv personnummret p\x86 personen du s\x94ker: ";
    
cin >> number;
    
int index LinearSearch(myListnumber);


    if(
index == -1)
        
cout << " Personen hittades ej! ";
    else
        
cout << " Personen du s\x94ker heter " << myList[index].name << " och finns p\x86 index " << index;

    
cin.get();
    return 
0;

__________________
Senast redigerad av gholiat 2017-07-26 kl. 00:50.
Citera
2017-07-26, 00:54
  #2
Medlem
Xer0s avatar
Prva kr i dbg och backtracea crashen.

Din kod r rtt ful f. Varfr anvnda char* i stllet fr String?
Vad jag vet kan man ocks initialisera poster i arrays, typ.

Kod:
Person person[10];
person[0] = Person("Jan Ericsson", 6710044526);

Jag har inte kodat c++ p 3 r, men det knns nd naturligt att undvika c-strings (som f. r const char*).

Jag skulle sjlv inte anvnt en array. Fr det du vill gra r ju att skapa en dynamisk array, och d r vector bsta lsningen. Sorry men, arrayer r inte coola p ngot stt, om det inte var en del av uppgiften?
__________________
Senast redigerad av Xer0 2017-07-26 kl. 01:10.
Citera
2017-07-26, 04:21
  #3
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
Tja ska frska gra ett program dr man fr mata in ett namn och personnummer i en array men nr jag gr det p det hr sttet (koden som r kommenterad bort //) s krashar programmet. Nr jag gr det p det nya sttet (den nuvarande koden) s krashar programmet nr jag ska ska upp personnumret i slutet av programmet. (Det krashar inte om jag tar ngon av personerna som redan r skapta). Ngon som vet vad jag gr fel?
Lttare rkna var du gjorde rtt

Det finns 2 stora fel i din kod:
  1. Man kan inte utka en array som deklarerats med en storlek
  2. char* r en pekare till en char och inte en textstrng
I detta fallet skulle jag inte anvnda char* eller en fix array av Person-objektpekare. Vector och string r om inte annat enklare att hantera. Ls dessutom aldrig in variabler direkt med cin utan anvnd getline(cin, strngobjekt) och omvandla strngobjekt till den typ du vill ha, i mitt fall med hjlp av stringstream(). Prova utg frn denna smlsmittinattenlsning (det finns mycket bttre lsningar):
Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class Person {
 public:
  Person() = delete;
  Person(string _s, int _key) : name(_s), personnummer(_key) {}

  string& getName() {
    return name;
  }

  int getNumber() {
    return personnummer;
  }

 private:
  string name;
  int personnummer;
};

int main() {
  vector<Person> myList;
  myList.push_back(Person("Ander", 220212));
  myList.push_back(Person("Bosse", 330313));
  myList.push_back(Person("Calle", 440414));
  myList.push_back(Person("Douglas", 550515));
  myList.push_back(Person("Erik", 660616));
  myList.push_back(Person("Fredrik", 770717));
  myList.push_back(Person("Gustaf", 880818));
  myList.push_back(Person("Henrik", 880919));
  myList.push_back(Person("Isak", 881020));
  myList.push_back(Person("John", 920212));

  cout << "Element 3 is " << myList[3].getName() << ", " << myList[3].getNumber() << endl;

  string indata;
  int inNumber;
  
  cout << "Nummer? ";
  getline(cin, indata);
  stringstream(indata) >> inNumber;
  cout << "Namn? ";
  getline(cin, indata);
  myList.push_back(Person(indata, inNumber));

  size_t lastElem = myList.size() - 1;
  cout << "Last element " << lastElem << " is " << myList[lastElem].getName() << ", " << myList[lastElem].getNumber() << endl;

  return 0;
}
Citera
2017-07-26, 11:02
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av gholiat
Tja ska frska gra ett program dr man fr mata in ett namn och personnummer i en array men nr jag gr det p det hr sttet (koden som r kommenterad bort //) s krashar programmet. Nr jag gr det p det nya sttet (den nuvarande koden) s krashar programmet nr jag ska ska upp personnumret i slutet av programmet. (Det krashar inte om jag tar ngon av personerna som redan r skapta). Ngon som vet vad jag gr fel?

Kod:
#include <iostream>

using namespace std;

class 
Person
{
public:
    
charname;
    
int personnummer;

    
void SetInfo(char_nameint _personnummer)
    {
        
name _name;
        
personnummer _personnummer;
    }

};

int LinearSearch(PersonpersonArrayint key)
{
    for (
int i 011i++)
    {
        if (
personArray[i].personnummer == key)
            return 
i;
    }
    return -
1//Personen hittades ej
}

int main()
{

    
int listsize;
    
int listnumber;
    
charnameperson;
    
int personsnumber;

    
listsize 11;
    
listnumber 10;

    
//KOD SOM TOGS BORT FR LOOPEN DR SWITCH CASE 1 GR ATT MAN LGGER TILL NAMN- 
    //OCH PERSONNUMMER
    //listsize = 10;
    //listsize++;
    //listnumber = 9;
    //listnumber++;

    
charKalle;

    
nameperson Kalle;
    
personsnumber 930313;

    
//KOD SOM TOGS BORT SOM SKA VA HR P NGOT STT
    //cout << "Skriv namnet du vill lgga till: ";
    //cin >> nameperson;
    //cout << "Skriv personens personnummer;
    //cin >> personsnumber


    
Person myList[listsize];
    
myList[0].SetInfo("Ander"220212);
    
myList[1].SetInfo("Bosse"330313);
    
myList[2].SetInfo("Calle"440414);
    
myList[3].SetInfo("Douglas"550515);
    
myList[4].SetInfo("Erik"660616);
    
myList[5].SetInfo("Fredrik"770717);
    
myList[6].SetInfo("Gustaf"880818);
    
myList[7].SetInfo("Henrik"880919);
    
myList[8].SetInfo("Isak"881020);
    
myList[9].SetInfo("John"920212);
    
myList[listnumber].SetInfo(namepersonpersonsnumber);

    
int number;
    
cout << " Skriv personnummret p\x86 personen du s\x94ker: ";
    
cin >> number;
    
int index LinearSearch(myListnumber);


    if(
index == -1)
        
cout << " Personen hittades ej! ";
    else
        
cout << " Personen du s\x94ker heter " << myList[index].name << " och finns p\x86 index " << index;

    
cin.get();
    return 
0;

Ska du anvnda charpekare i din klass r det ven lmpligt att du frutom en defaultkonstruktor ven skapar en copykonstruktor, tilldelningsoperator och en destruktor, annars kommer du troligen f stora problem med minneslckor framver.

Som ppekats r det nog bttre om du anvnder de typer som redan finns s slipper du trasslet med pekare.

Fr vrigt s r din charpekare i nulget oinitierad vilket innebr att du vid anvndning av den kommer skriva ver den minnesposition den fr nrvarande pekar p. Ska du gra det med cpp mste du anvnda new-operatorn fr att allokera upp minne du kan stoppa i dina chars i, r det c du vill anvnda mste du anvnda malloc fr samma manver.

Att anvnda oinitierade pekare fr allts saker och krascha i bsta fall, i smsta fall gr det att utfra hpnadsvckande kraftfulla attacker p systemet skrpet exekverar p.
Citera
2017-07-26, 23:15
  #5
Medlem
Citat:
Ursprungligen postat av RostigHink
Lttare rkna var du gjorde rtt

Det finns 2 stora fel i din kod:
  1. Man kan inte utka en array som deklarerats med en storlek
  2. char* r en pekare till en char och inte en textstrng
I detta fallet skulle jag inte anvnda char* eller en fix array av Person-objektpekare. Vector och string r om inte annat enklare att hantera. Ls dessutom aldrig in variabler direkt med cin utan anvnd getline(cin, strngobjekt) och omvandla strngobjekt till den typ du vill ha, i mitt fall med hjlp av stringstream(). Prova utg frn denna smlsmittinattenlsning (det finns mycket bttre lsningar):
Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class Person {
 public:
  Person() = delete;
  Person(string _s, int _key) : name(_s), personnummer(_key) {}

  string& getName() {
    return name;
  }

  int getNumber() {
    return personnummer;
  }

 private:
  string name;
  int personnummer;
};

int main() {
  vector<Person> myList;
  myList.push_back(Person("Ander", 220212));
  myList.push_back(Person("Bosse", 330313));
  myList.push_back(Person("Calle", 440414));
  myList.push_back(Person("Douglas", 550515));
  myList.push_back(Person("Erik", 660616));
  myList.push_back(Person("Fredrik", 770717));
  myList.push_back(Person("Gustaf", 880818));
  myList.push_back(Person("Henrik", 880919));
  myList.push_back(Person("Isak", 881020));
  myList.push_back(Person("John", 920212));

  cout << "Element 3 is " << myList[3].getName() << ", " << myList[3].getNumber() << endl;

  string indata;
  int inNumber;
  
  cout << "Nummer? ";
  getline(cin, indata);
  stringstream(indata) >> inNumber;
  cout << "Namn? ";
  getline(cin, indata);
  myList.push_back(Person(indata, inNumber));

  size_t lastElem = myList.size() - 1;
  cout << "Last element " << lastElem << " is " << myList[lastElem].getName() << ", " << myList[lastElem].getNumber() << endl;

  return 0;
}

Tack Xer0 och Proton fr era svar, jag kommer nog frst mig p dom bttre nr jag vet vad strings och pekare r haha. (Min kurs har inte gtt igenom strings iaf, och jag ser dom verallt lol) Och pekare gick den igenom snabbt men har inte anvnt sig av frrens nu i en uppgift som inte hade med det att gra.

Och ett stort tack till dig RostigHink! Hade du bara skrivit det du skrivit hade jag inte kunnat gra s mycket, men nu tack vare att du skrev en fungerande kod tillsammans med orden du anvnde s kan jag leka med din kod och sakta frst mig p vad allt gr och betyder. Uppskattar det som sjutton! Rddar plugglivet p mig! Tack!
Citera
2017-07-26, 23:53
  #6
Medlem
Citat:
Ursprungligen postat av RostigHink
Lttare rkna var du gjorde rtt

Det finns 2 stora fel i din kod:
  1. Man kan inte utka en array som deklarerats med en storlek
  2. char* r en pekare till en char och inte en textstrng
I detta fallet skulle jag inte anvnda char* eller en fix array av Person-objektpekare. Vector och string r om inte annat enklare att hantera. Ls dessutom aldrig in variabler direkt med cin utan anvnd getline(cin, strngobjekt) och omvandla strngobjekt till den typ du vill ha, i mitt fall med hjlp av stringstream(). Prova utg frn denna smlsmittinattenlsning (det finns mycket bttre lsningar):
Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class Person {
 public:
  Person() = delete;
  Person(string _s, int _key) : name(_s), personnummer(_key) {}

  string& getName() {
    return name;
  }

  int getNumber() {
    return personnummer;
  }

 private:
  string name;
  int personnummer;
};

int main() {
  vector<Person> myList;
  myList.push_back(Person("Ander", 220212));
  myList.push_back(Person("Bosse", 330313));
  myList.push_back(Person("Calle", 440414));
  myList.push_back(Person("Douglas", 550515));
  myList.push_back(Person("Erik", 660616));
  myList.push_back(Person("Fredrik", 770717));
  myList.push_back(Person("Gustaf", 880818));
  myList.push_back(Person("Henrik", 880919));
  myList.push_back(Person("Isak", 881020));
  myList.push_back(Person("John", 920212));

  cout << "Element 3 is " << myList[3].getName() << ", " << myList[3].getNumber() << endl;

  string indata;
  int inNumber;
  
  cout << "Nummer? ";
  getline(cin, indata);
  stringstream(indata) >> inNumber;
  cout << "Namn? ";
  getline(cin, indata);
  myList.push_back(Person(indata, inNumber));

  size_t lastElem = myList.size() - 1;
  cout << "Last element " << lastElem << " is " << myList[lastElem].getName() << ", " << myList[lastElem].getNumber() << endl;

  return 0;
}

En frga... varfr blir det fel nr jag frsker skriva cin framfr:

Kod:
cout << "Nummer? ";
    
getline(cinindata);
    
stringstream(indata) >> inNumber;
    
cout << "Namn? ";
    
getline(cinindata);
    
myList.push_back(Person(indatainNumber)); 

? Jag har frsker gra om det till en switch dr case 1 blir det hr, men nr jag stter cin >> "nr"; innan den biten kod (varesig switch case 1 r dr eller inte) s blir det "Nummer?" och "Namn?" direkt p varandra p samma rad. Det buggar sig fr ngot skl? (Frstr som sagt inte string riktigt n s du vet)

Och en sista frga fr idag. Hur skulle jag gra om jag vill kunna skriva in personnummer och f ut namn och plats i listan? Jag vet hur jag fr ut namn och personnummer via "int blabla;" " cin >> blabla;" och "cout << myList[blabla].getName();" men inte hur jag vnder om det?
__________________
Senast redigerad av gholiat 2017-07-27 kl. 00:11.
Citera
2017-07-27, 13:08
  #7
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
En frga... varfr blir det fel nr jag frsker skriva cin framfr:

Kod:
cout << "Nummer? ";
    
getline(cinindata);
    
stringstream(indata) >> inNumber;
    
cout << "Namn? ";
    
getline(cinindata);
    
myList.push_back(Person(indatainNumber)); 

? Jag har frsker gra om det till en switch dr case 1 blir det hr, men nr jag stter cin >> "nr"; innan den biten kod (varesig switch case 1 r dr eller inte) s blir det "Nummer?" och "Namn?" direkt p varandra p samma rad. Det buggar sig fr ngot skl? (Frstr som sagt inte string riktigt n s du vet)

Och en sista frga fr idag. Hur skulle jag gra om jag vill kunna skriva in personnummer och f ut namn och plats i listan? Jag vet hur jag fr ut namn och personnummer via "int blabla;" " cin >> blabla;" och "cout << myList[blabla].getName();" men inte hur jag vnder om det?
Jag greppar inte riktigt frgan s du fr nog bertta vad du vill gra.

Jag moddade din funktion LinearSearch s den passar vektorn i stllet fr arrayen. Borde ge en ledtrd fr fortsatt jobb:
Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class Person {
 public:
  Person() = delete;
  Person(string _s, int _key) : name(_s), personnummer(_key) {}

  string& getName() {
    return name;
  }

  int getNumber() {
    return personnummer;
  }

 private:
  string name;
  int personnummer;
};


int LinearSearch(vector<Person>& personArray, int key)
{
  for (size_t i = 0; i < personArray.size(); i++)
  {
    if (personArray[i].getNumber() == key)
      return i;
  }
  return -1; //Personen hittades ej
}


int main() {
  vector<Person> myList;
  myList.push_back(Person("Ander", 220212));
  myList.push_back(Person("Bosse", 330313));
  myList.push_back(Person("Calle", 440414));
  myList.push_back(Person("Douglas", 550515));
  myList.push_back(Person("Erik", 660616));
  myList.push_back(Person("Fredrik", 770717));
  myList.push_back(Person("Gustaf", 880818));
  myList.push_back(Person("Henrik", 880919));
  myList.push_back(Person("Isak", 881020));
  myList.push_back(Person("John", 920212));

  string indata;
  int inNumber;
  int response;

  cout << "Nummer? ";
  getline(cin, indata);
  stringstream(indata) >> inNumber;

  response = LinearSearch(myList, inNumber);

  if (-1 == response) {
    cout << "Nummer hittades inte." << endl;
  }
  else {
    cout << "Nummer hittat i plats " << response << " och namnet r " << myList[response].getName() << endl;
  }

  return 0;
}

Jag kan gissa att du ville lsa in ett nummer som sedan ska switchas p och du anvnde cin >> integer? Det finns ett problem med att lsa in en integer direkt med cin r att endast sjlva siffran lses in, inte EOL-teknet som lggs in nr du trycker enter. Nr sedan getline() anropas lses EOL in och stringobjektet fylls med en tom strng.

Drfr anvnder jag aldrig cin >> utan vljer getline(cin, stringobjekt) och tar hand och omvandlar strngen istllet.
Citera
2017-07-27, 15:35
  #8
Medlem
Citat:
Ursprungligen postat av RostigHink
Jag greppar inte riktigt frgan s du fr nog bertta vad du vill gra.


Jag ville stta din rad kod i en switch loop, dr case 1 gr att man anvnder den koden fr att stta in en ny person och personnummer och case 2 s kan man ska p personnummer fr att f upp namn och plats i index (vilket din nya kod lyckas gra).

Men nr jag stter den hr koden (frn din frsta kod) i en switch loop
Kod:
cout << "Nummer? "
    
getline(cinindata); 
    
stringstream(indata) >> inNumber
    
cout << "Namn? "
    
getline(cinindata); 
    
myList.push_back(Person(indatainNumber)); 

S blir det fel nr jag ska frska gra s att man kan klicka p 1 fr att komma in i switch loopen. Allts jag kan gra switch(nr) och stta koden dr inne i case 1, men nr jag skriver "cin >> nr;" innan switch loopen s blir allt inne i loopen fel.
Citera
2017-07-27, 15:43
  #9
Medlem
Hr r min nya kod. Du kommer se vad som gr snett nr du kr den.
Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class 
Person {
 public:
  
Person() = delete;
  
Person(string _sint _key) : name(_s), personnummer(_key) {}

  
stringgetName() {
    return 
name;
  }

  
int getNumber() {
    return 
personnummer;
  }

 private:
  
string name;
  
int personnummer;
};

int LinearSearch(vector<Person>& personArrayint key)
{
  for (
size_t i 0personArray.size(); i++)
  {
    if (
personArray[i].getNumber() == key)
      return 
i;
  }
  return -
1//Personen hittades ej
}


int main() {
    
vector<PersonmyList;
    
myList.push_back(Person("Ander"220212));
    
myList.push_back(Person("Bosse"330313));
    
myList.push_back(Person("Calle"440414));
    
myList.push_back(Person("Douglas"550515));
    
myList.push_back(Person("Erik"660616));
    
myList.push_back(Person("Fredrik"770717));
    
myList.push_back(Person("Gustaf"880818));
    
myList.push_back(Person("Henrik"880919));
    
myList.push_back(Person("Isak"881020));
    
myList.push_back(Person("John"920212));

    
cout << "Element 3 is " << myList[3].getName() << ", " << myList[3].getNumber() << endl;

    
string indata;
    
int inNumber;
    
int i;
    
int response;
    
int nr;

    
cout << " Choose 1 to add a person and it's personnumber\n Choose 2 to search for a person and his/her place in the index by writing their personnumber\n Choose 3 to exit the program\n";
    
cin >> nr//den hr koden fuckar upp allt

    
switch(nr//Kod fr att stta in Person och Personnummer blir fel inne i switch-loopen, men inte tack vare switch-loopen, utan tack vare cin >> nr;
    
{
    case 
1//Kod fr att mata in ny person och personnummer
    
cout << "Nummer? ";
    
getline(cinindata);
    
stringstream(indata) >> inNumber;
    
cout << "Namn? ";
    
getline(cinindata);
    
myList.push_back(Person(indatainNumber));
    break;

    case 
2//Kod fr att ska p personnummer
    
cout << "Nummer? ";
    
getline(cinindata);
    
stringstream(indata) >> inNumber;

    
response LinearSearch(myListinNumber);

    if (-
== response) {
    
cout << "Nummer hittades inte." << endl;
    }
    else {
    
cout << "Nummer hittat i plats " << response << " och namnet r " << myList[response].getName() << endl;
    }
    break;

    case 
3//kod fr att avsluta programmet
    
return 0;
    }








    
size_t lastElem myList.size() - 1;
    
cout << "Last element " << lastElem << " is " << myList[lastElem].getName() << ", " << myList[lastElem].getNumber() << endl;

    return 
0;

__________________
Senast redigerad av gholiat 2017-07-27 kl. 16:02.
Citera
2017-07-27, 17:07
  #10
Medlem
Glmde stta switch i en loop, men knns inte som det r viktigt nu innan cin-buggen r fixad.
Citera
2017-07-27, 17:57
  #11
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
Glmde stta switch i en loop, men knns inte som det r viktigt nu innan cin-buggen r fixad.
Enklast r en getline(cin, indata) till indata fljt av en stringstream(indata) >> nr;

Som jag sa s lser inte cin entertecknet efter siffran s det ligger kvar och str efterfljande getline(cin, ...).
Citera
2017-07-30, 13:55
  #12
Medlem
Citat:
Ursprungligen postat av RostigHink
Enklast r en getline(cin, indata) till indata fljt av en stringstream(indata) >> nr;

Som jag sa s lser inte cin entertecknet efter siffran s det ligger kvar och str efterfljande getline(cin, ...).

Tack! Nu r det sista jag ska gra r att byta ut din linjra skning till binr skning (ska se om jag kan lista ut den sjlv) och implementera en bubblesort-metod/funktion som sorterar listan efter lder (personnummer) varje gng jag trycker p 2 eller 3 i menyn (allts innan jag sker p ngon med case 2 s ska listan sorteras, eftersom binr skning krver en sorterad lista). Men innan jag ens kan lista ut vad jag ska skriva i case 2 och case 3 fr att kalla p bubbleSort, s mste jag f void bubbleSort att fungera, men det r ngot fel som jag inte frstr.

Hr r koden. Skert obvious fel eftersom bde vector, klasser och strings r allt rtt nytt fr mig och alla blev inkastade p samma gng i denna uppgift.

Kod:
#include<iostream>
#include<vector>
#include<string>
#include<sstream>

using namespace std;

class 
Person {
 public:
  
Person() = delete;
  
Person(string _sint _key) : name(_s), personnummer(_key) {}

  
stringgetName() {
    return 
name;
  }

  
int getNumber() {
    return 
personnummer;
  }

 private:
  
string name;
  
int personnummer;
};

int LinearSearch(vector<Person>& personArrayint key)
{
  for (
size_t i 0personArray.size(); i++)
  {
    if (
personArray[i].getNumber() == key)
      return 
i;
  }
  return -
1//Personen hittades ej
}

void bubbleSort(vector<Person>& personArray//Fel hr
{
    for (
int i 0personArray.size(); i++)
    {
        
int nrLeft personArray.size() - i;

        for (
int j 0nrLeftj++)
        {
            if (
personArray[j].getNumber() > personArray[j+1].getNumber())
            {
                
int temp personArray[j].getNumber();
                
personArray[j].getNumber() = personArray[j+1].getNumber(); //Hr specifikt
                
personArray[j+1].getNumber() = temp;
            }
        }

    }
}




int main() {
    
vector<PersonmyList;
    
myList.push_back(Person("Ander"220212));
    
myList.push_back(Person("Bosse"330313));
    
myList.push_back(Person("Calle"440414));
    
myList.push_back(Person("Douglas"550515));
    
myList.push_back(Person("Erik"660616));
    
myList.push_back(Person("Fredrik"110110));
    
myList.push_back(Person("Gustaf"880818));
    
myList.push_back(Person("Henrik"880919));
    
myList.push_back(Person("Isak"881020));
    
myList.push_back(Person("John"920212));





    
string indata;
    
int inNumber;
    
int i;
    
int response;
    
int nr;

    for (
0myList.size(); i++)
    {
        
cout << " Choose 1 to add a person and it's personnumber\n Choose 2 to search for a person and his/her place in the index by writing their personnumber\n Choose 3 to exit the program\n";
        
getline(cinindata);
        
stringstream(indata) >> nr;

        switch(
nr
        {
            case 
1:
            
cout << "Nummer? ";
            
getline(cinindata);
            
stringstream(indata) >> inNumber;
            
cout << "Namn? ";
            
getline(cinindata);
            
myList.push_back(Person(indatainNumber));
            break;

            case 
2//Kod gr att ska p personnummer
            
cout << "Nummer? ";
            
getline(cinindata);
            
stringstream(indata) >> inNumber;

            
response LinearSearch(myListinNumber);

            if (-
== response)
            {
                
cout << "Nummer hittades inte." << endl;
            }
            else
            {
            
cout << "Nummer hittat i plats " << response << " och namnet r " << myList[response].getName() << endl;
            }
            break;

            case 
3//kod fr att avsluta programmet
            
goto exit_loop;
        }
    }

    
exit_loop: ;


    for (
int n 0myList.size(); n++)
    {
        
cout << "Element " << << " is " << myList[n].getName() << ", " << myList[n].getNumber() << endl;
    }





    
size_t lastElem myList.size() - 1;
    
cout << "Last element " << lastElem << " is " << myList[lastElem].getName() << ", " << myList[lastElem].getNumber() << endl;

    return 
0;

__________________
Senast redigerad av gholiat 2017-07-30 kl. 14:54.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in