webForumDet fria alternativet

problem med array

9 svar · 770 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005858 inlägg
#1

Har följande kod:

int main()
{
    Person person[10];
    int menyVal;
    bool go = true;

    do
    {
        if(menyVal == 1)
        {
            add();
            break;
        }
        else if(menyVal == 2)
        {
           show();
           break;
        }
        else
        {
            go = false;
        }
    }while(go);
  return 0;
}

void add()
{
    int j =3;
    string fnamn;
    string enamn;

    //Frågar användaren efter namn, adress
    cout << "Ange Förnamn: ";
    cin >> fnamn;
    cout << "Ange Efternamn: ";
    cin >> enamn;

    person[j].setFirstName(fnamn);
    person[j].setLastName(enamn);

    j+=1;
}

void show()
{
      for(int i=0; i<10; i++)
    {
        cout << person[i].getFirstName() + " " + person[i].name.getLastName() << endl;
    }

}

Undrar hur man gör när man ska skicka min array (person) mellan main, add, show. Nu kommer man bara åt den i main metoden.

Sen i metoden show, hur gör man för att få reda på hur många rader arrayen innehåller, så man slipper loopa ut massa blankrader?

Tacksam för all hjälp :stud

Peter SMedlem sedan dec. 20025 484 inlägg
#2
void show(Person* p, int size)
{
  //use p[]
}

show(person, 10);
CompusaMedlem sedan jan. 20022 952 inlägg
#3

Vad du gör i din add-funktion förstår jag inte eftersom du lägger in elementet på samma index varje gång, så den får du nog fundera lite över.

Enligt mig är det bättre och mindre bökigt att använda referenser istället för pekare.

void show(Person& person, int size)
{
    for(int i=0; i < size; i++)
    {
        cout << person[i].getFirstName() + " " + person[i].name.getLastName() << endl;
    }

}

show(person, 10);

Referenser vs pekare, se nedan:

void swap(int& variable1, int& variable2)
{
    int temp = variable1;
    variable1 = variable2;
    variable2 = temp;
}

void swap(int* variable1, int* variable2)
{
    int temp = *variable1;
    *variable1 = *variable2;
    *variable2 = temp;
}

Ytterligare argument: http://www.parashift.com/c++-faq-lite/references.html#faq-8.6

VinnarenMedlem sedan sep. 2005858 inlägg
#4

tack, det funkade perfa :birp

Har ett problem till nu när jag kodade vidare. Det är när jag ska anv getline
Har följande:

    cout << "Ange GatuAdress: ";
    cin.getline(GatuAdress,30);
    cout << "Ange PostNummer: ";
    cin.getline(PostNummer,6);

Men får felmeddelandet:
error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'std::string' to 'char *'

Hur löser jag det?

tacksam för all hjälp :stud

Peter SMedlem sedan dec. 20025 484 inlägg
#5
getline(cin, PostNummer);
VinnarenMedlem sedan sep. 2005858 inlägg
#6

fungerade inte, får nu felmeddelandet:

error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided

5 gånger på varje:

    cout << "Ange GatuAdress: ";
    getline(GatuAdress, cin);
    cout << "Ange PostNummer: ";
    getline(PostNummer, cin);
Peter SMedlem sedan dec. 20025 484 inlägg
#7

Jag lade parametrarna fel. Se ovan :)

VinnarenMedlem sedan sep. 2005858 inlägg
#8

tack, ett litet problem bara,

    cout << "Ange GatuAdress: ";
    getline(cin, GatuAdress);
    cout << endl << "Ange PostNummer: ";
    getline(cin, PostNummer);

Ange GatuAdress:
Ange PostNummer:

kommer upp samtidigt, hur löser man det så det kommer fram en och en som de andra innan gör?

yadorMedlem sedan mars 2004457 inlägg
#9

Du har nog läst in några tecken från tagentbortet med t ex "cin >> any;", men glömt bort att ta bort "enter knappen" i inmatningsbuffren som stannar kvar.

För att testa om detta är sant så kan du prova skriva cin.ignore(); precis före getline(cin,GatuAdress);

VinnarenMedlem sedan sep. 2005858 inlägg
#10

tack, nu funkar det :bire

122 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
120 ms — hämta tråd, inlägg och bilagor (db)