webForumDet fria alternativet

problem med array

C/C++

9 svar · 774 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#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

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

show(person, 10);
Medlem sedan jan. 20023 327 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

Medlem sedan sep. 2005833 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

Medlem sedan dec. 20025 483 inlägg
#5
getline(cin, PostNummer);
Medlem sedan sep. 2005833 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);
Medlem sedan dec. 20025 483 inlägg
#7

Jag lade parametrarna fel. Se ovan :)

Medlem sedan sep. 2005833 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?

Medlem sedan mars 2004455 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);

Medlem sedan sep. 2005833 inlägg
#10

tack, nu funkar det :bire

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)