Sökfunktion i en array av structs
Hej! Jag håller på skapar en array av structs innehållande familjemedlemmar. Har letat efter information i flera dagar men nu börjar det bli kort om tid så jag chansar här! Skulle vilja ha tips om 2 saker:
1. Sök familjemedlem - vad ska jag använda för att låta användaren söka efter en familjemedlem som finns i min array?
2. Ändra familjemedlem - i nuläget har jag lagt in att man kan ändra familjemedlem nr 4, men jag vill att användaren ska kunna välja själv vilken medlem som ska ändras, är detta möjligt?
#include <iostream>
#include <string>
#include <clocale>
using namespace std;
struct Person
{
string namn;
int ålder;
char kön;
};
Person familj[4];
int main()
{
setlocale(LC_ALL, "sv_SE");
// Lista över familjemedlemmarna.
familj[0].namn = "Anna";
familj[0].ålder = 32;
familj[0].kön = 'K';
familj[1].namn = "Bill";
familj[1].ålder = 37;
familj[1].kön = 'M';
familj[2].namn = "Charlie";
familj[2].ålder = 8;
familj[2].kön = 'M';
familj[3].namn = "Mona";
familj[3].ålder = 3;
familj[3].kön = 'K';
// Konstanter för menyval.
const int VISA_VAL = 1,
SÖK_VAL = 2,
ÄNDRA_VAL = 3,
AVSLUTA_VAL = 4;
while (true)
{
// Skriver ut menyn.
cout << "::::::::Din familj::::::::" << endl;
cout << endl;
cout << "1. Visa familjemedlemmar" << endl;
cout << "2. Sök familjemedlem" << endl;
cout << "3. Ändra familjemedlem" << endl;
cout << "4. Avsluta" << endl;
cout << endl;
cout << "Ange ditt val (1-4): ";
// Användarens val.
int menyVal;
cin >> menyVal;
cout << endl;
// Olika utfall från menyn.
switch (menyVal)
{
case VISA_VAL:
for (int i = 0; i < 4; i++)
{
cout << "Namn: " << familj[i].namn << "\t" << "Ålder: " << familj[i].ålder << "\t" << "Kön: " << familj[i].kön << endl;
cout << endl;
}break;
case SÖK_VAL:
cout << "Ange namn på personen du söker: ";
break;
case ÄNDRA_VAL:
cout << "Ange ett namn: ";
cin >> familj[3].namn;
cout << "Ange ålder: ";
cin >> familj[3].ålder;
cout << "Ange kön: ";
cin >> familj[3].kön;
break;
case AVSLUTA_VAL:
cout << "Avslutar programmet..\n";
return 0;
}
}
}
Hej och välkommen till Pluggakuten!
1. Sök familjemedlem: Lägg in en fråga om namnet som skansökas i switchen SÖK_VAL. Läs in användarens svar i en strängvariabel. Iterera genom arrayen och jämför structens namn-fält med det inlästa namnet. Om match så skriv ut hela den strucrmten och bryt iterationen.
2. Ändra familjemedlem: Lägg in en fråga om vilken famiöjemedlem som ska ändras (nummer eller namn) i switchen ÄNDRA_VAL. Läs in användarens svar i en variabel. Iterera genom arrayen och leta efter rätt familjemedlem. Om match så fråga efter namn, ålder, kön som du redan gör, men anvönd rätt index.
- Du har redan en loop under case VISA_VAL: lägg en likadan loop under SOK_VAL men först låter du användaren skriva in ett namn i en sträng variabel som du sen skall leta efter, sen loopa igenom arrayen och jämför namnet med de namn som finns i arrayen
- Under case ÄNDRA_VAL: först läs in en siffra från tangentbordet, kolla om det är 0,1,2.3 om ja, använd det som index i den array. t.ex. int n; cin >> n; if (n > -1 && n < 4) .... familj[n]