Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-07-26, 00:46
  #1
Medlem
Tja ska försöka göra ett program där man får mata in ett namn och personnummer i en array men när jag gör det på det här sättet (koden som är kommenterad bort //) så krashar programmet. När jag gör det på det nya sättet (den nuvarande koden) så krashar programmet när jag ska söka upp personnumret i slutet av programmet. (Det krashar inte om jag tar någon av personerna som redan är skapta). Någon som vet vad jag gör 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 FÖR LOOPEN DÄR SWITCH CASE 1 GÖR ATT MAN LÄGGER TILL NAMN- 
    //OCH PERSONNUMMER
    //listsize = 10;
    //listsize++;
    //listnumber = 9;
    //listnumber++;

    
charKalle;

    
nameperson Kalle;
    
personsnumber 930313;

    
//KOD SOM TOGS BORT SOM SKA VA HÄR PÅ NÅGOT SÄTT
    //cout << "Skriv namnet du vill lägga 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
Pröva kör i dbg och backtracea crashen.

Din kod är rätt ful fö. Varför använda char* i stället för 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 känns ändå naturligt att undvika c-strings (som fö. är const char*).

Jag skulle själv inte använt en array. För det du vill göra är ju att skapa en dynamisk array, och då är vector bästa lösningen. Sorry men, arrayer är inte coola på något sätt, 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
Moderator
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
Tja ska försöka göra ett program där man får mata in ett namn och personnummer i en array men när jag gör det på det här sättet (koden som är kommenterad bort //) så krashar programmet. När jag gör det på det nya sättet (den nuvarande koden) så krashar programmet när jag ska söka upp personnumret i slutet av programmet. (Det krashar inte om jag tar någon av personerna som redan är skapta). Någon som vet vad jag gör fel?
Lättare räkna var du gjorde rätt

Det finns 2 stora fel i din kod:
  1. Man kan inte utöka en array som deklarerats med en storlek
  2. char* är en pekare till en char och inte en textsträng
I detta fallet skulle jag inte använda char* eller en fix array av Person-objektpekare. Vector och string är om inte annat enklare att hantera. Läs dessutom aldrig in variabler direkt med cin utan använd getline(cin, strängobjekt) och omvandla strängobjekt till den typ du vill ha, i mitt fall med hjälp av stringstream(). Prova utgå från denna sömlösmittinattenlösning (det finns mycket bättre lösningar):
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 försöka göra ett program där man får mata in ett namn och personnummer i en array men när jag gör det på det här sättet (koden som är kommenterad bort //) så krashar programmet. När jag gör det på det nya sättet (den nuvarande koden) så krashar programmet när jag ska söka upp personnumret i slutet av programmet. (Det krashar inte om jag tar någon av personerna som redan är skapta). Någon som vet vad jag gör 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 FÖR LOOPEN DÄR SWITCH CASE 1 GÖR ATT MAN LÄGGER TILL NAMN- 
    //OCH PERSONNUMMER
    //listsize = 10;
    //listsize++;
    //listnumber = 9;
    //listnumber++;

    
charKalle;

    
nameperson Kalle;
    
personsnumber 930313;

    
//KOD SOM TOGS BORT SOM SKA VA HÄR PÅ NÅGOT SÄTT
    //cout << "Skriv namnet du vill lägga 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 använda charpekare i din klass är det även lämpligt att du förutom en defaultkonstruktor även skapar en copykonstruktor, tilldelningsoperator och en destruktor, annars kommer du troligen få stora problem med minnesläckor framöver.

Som påpekats är det nog bättre om du använder de typer som redan finns så slipper du trasslet med pekare.

För övrigt så är din charpekare i nuläget oinitierad vilket innebär att du vid användning av den kommer skriva över den minnesposition den för närvarande pekar på. Ska du göra det med cpp måste du använda new-operatorn för att allokera upp minne du kan stoppa i dina chars i, är det c du vill använda måste du använda malloc för samma manöver.

Att använda oinitierade pekare får alltså saker och krascha i bästa fall, i sämsta fall går det att utföra häpnadsväckande kraftfulla attacker på systemet skräpet exekverar på.
Citera
2017-07-26, 23:15
  #5
Medlem
Citat:
Ursprungligen postat av RostigHink
Lättare räkna var du gjorde rätt

Det finns 2 stora fel i din kod:
  1. Man kan inte utöka en array som deklarerats med en storlek
  2. char* är en pekare till en char och inte en textsträng
I detta fallet skulle jag inte använda char* eller en fix array av Person-objektpekare. Vector och string är om inte annat enklare att hantera. Läs dessutom aldrig in variabler direkt med cin utan använd getline(cin, strängobjekt) och omvandla strängobjekt till den typ du vill ha, i mitt fall med hjälp av stringstream(). Prova utgå från denna sömlösmittinattenlösning (det finns mycket bättre lösningar):
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 för era svar, jag kommer nog förstå mig på dom bättre när jag vet vad strings och pekare är haha. (Min kurs har inte gått igenom strings iaf, och jag ser dom överallt lol) Och pekare gick den igenom snabbt men har inte använt sig av förrens nu i en uppgift som inte hade med det att göra.

Och ett stort tack till dig RostigHink! Hade du bara skrivit det du skrivit hade jag inte kunnat göra så mycket, men nu tack vare att du skrev en fungerande kod tillsammans med orden du använde så kan jag leka med din kod och sakta förstå mig på vad allt gör och betyder. Uppskattar det som sjutton! Räddar plugglivet på mig! Tack!
Citera
2017-07-26, 23:53
  #6
Medlem
Citat:
Ursprungligen postat av RostigHink
Lättare räkna var du gjorde rätt

Det finns 2 stora fel i din kod:
  1. Man kan inte utöka en array som deklarerats med en storlek
  2. char* är en pekare till en char och inte en textsträng
I detta fallet skulle jag inte använda char* eller en fix array av Person-objektpekare. Vector och string är om inte annat enklare att hantera. Läs dessutom aldrig in variabler direkt med cin utan använd getline(cin, strängobjekt) och omvandla strängobjekt till den typ du vill ha, i mitt fall med hjälp av stringstream(). Prova utgå från denna sömlösmittinattenlösning (det finns mycket bättre lösningar):
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 fråga... varför blir det fel när jag försöker skriva cin framför:

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

? Jag har försöker göra om det till en switch där case 1 blir det här, men när jag sätter cin >> "nr"; innan den biten kod (varesig switch case 1 är där eller inte) så blir det "Nummer?" och "Namn?" direkt på varandra på samma rad. Det buggar sig för något skäl? (Förstår som sagt inte string riktigt än så du vet)

Och en sista fråga för idag. Hur skulle jag göra om jag vill kunna skriva in personnummer och få ut namn och plats i listan? Jag vet hur jag får ut namn och personnummer via "int blabla;" " cin >> blabla;" och "cout << myList[blabla].getName();" men inte hur jag vänder om det?
__________________
Senast redigerad av gholiat 2017-07-27 kl. 00:11.
Citera
2017-07-27, 13:08
  #7
Moderator
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
En fråga... varför blir det fel när jag försöker skriva cin framför:

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

? Jag har försöker göra om det till en switch där case 1 blir det här, men när jag sätter cin >> "nr"; innan den biten kod (varesig switch case 1 är där eller inte) så blir det "Nummer?" och "Namn?" direkt på varandra på samma rad. Det buggar sig för något skäl? (Förstår som sagt inte string riktigt än så du vet)

Och en sista fråga för idag. Hur skulle jag göra om jag vill kunna skriva in personnummer och få ut namn och plats i listan? Jag vet hur jag får ut namn och personnummer via "int blabla;" " cin >> blabla;" och "cout << myList[blabla].getName();" men inte hur jag vänder om det?
Jag greppar inte riktigt frågan så du får nog berätta vad du vill göra.

Jag moddade din funktion LinearSearch så den passar vektorn i stället för arrayen. Borde ge en ledtråd för 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 läsa in ett nummer som sedan ska switchas på och du använde cin >> integer? Det finns ett problem med att läsa in en integer direkt med cin är att endast själva siffran läses in, inte EOL-teknet som läggs in när du trycker enter. När sedan getline() anropas läses EOL in och stringobjektet fylls med en tom sträng.

Därför använder jag aldrig cin >> utan väljer getline(cin, stringobjekt) och tar hand och omvandlar strängen istället.
Citera
2017-07-27, 15:35
  #8
Medlem
Citat:
Ursprungligen postat av RostigHink
Jag greppar inte riktigt frågan så du får nog berätta vad du vill göra.


Jag ville sätta din rad kod i en switch loop, där case 1 gör att man använder den koden för att sätta in en ny person och personnummer och case 2 så kan man söka på personnummer för att få upp namn och plats i index (vilket din nya kod lyckas göra).

Men när jag sätter den här koden (från din första 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 när jag ska försöka göra så att man kan klicka på 1 för att komma in i switch loopen. Alltså jag kan göra switch(nr) och sätta koden där inne i case 1, men när jag skriver "cin >> nr;" innan switch loopen så blir allt inne i loopen fel.
Citera
2017-07-27, 15:43
  #9
Medlem
Här är min nya kod. Du kommer se vad som går snett när du kör 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 här koden fuckar upp allt

    
switch(nr//Kod för att sätta in Person och Personnummer blir fel inne i switch-loopen, men inte tack vare switch-loopen, utan tack vare cin >> nr;
    
{
    case 
1//Kod för 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 för att söka 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 för 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
Glömde sätta switch i en loop, men känns inte som det är viktigt nu innan cin-buggen är fixad.
Citera
2017-07-27, 17:57
  #11
Moderator
RostigHinks avatar
Citat:
Ursprungligen postat av gholiat
Glömde sätta switch i en loop, men känns inte som det är viktigt nu innan cin-buggen är fixad.
Enklast är en getline(cin, indata) till indata följt av en stringstream(indata) >> nr;

Som jag sa så läser inte cin entertecknet efter siffran så det ligger kvar och stör efterföljande getline(cin, ...).
Citera
2017-07-30, 13:55
  #12
Medlem
Citat:
Ursprungligen postat av RostigHink
Enklast är en getline(cin, indata) till indata följt av en stringstream(indata) >> nr;

Som jag sa så läser inte cin entertecknet efter siffran så det ligger kvar och stör efterföljande getline(cin, ...).

Tack! Nu är det sista jag ska göra är att byta ut din linjära sökning till binär sökning (ska se om jag kan lista ut den själv) och implementera en bubblesort-metod/funktion som sorterar listan efter ålder (personnummer) varje gång jag trycker på 2 eller 3 i menyn (alltså innan jag söker på någon med case 2 så ska listan sorteras, eftersom binär sökning kräver en sorterad lista). Men innan jag ens kan lista ut vad jag ska skriva i case 2 och case 3 för att kalla på bubbleSort, så måste jag få void bubbleSort att fungera, men det är något fel som jag inte förstår.

Här är koden. Säkert obvious fel eftersom både vector, klasser och strings är allt rätt nytt för mig och alla blev inkastade på samma gång 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 här
{
    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(); //Här 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 gör att söka 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 för 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

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback