V Vinnaren Medlem sedan sep. 2005 833 inlägg Frågan 9 juli 2007 16:24 #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
P Peter S Medlem sedan dec. 2002 5 483 inlägg void show(Person* p, int size)
{
//use p[]
}
show(person, 10);
Compusa Medlem sedan jan. 2002 3 327 inlägg 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
V Vinnaren Medlem sedan sep. 2005 833 inlägg 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
P Peter S Medlem sedan dec. 2002 5 483 inlägg getline(cin, PostNummer);
V Vinnaren Medlem sedan sep. 2005 833 inlägg 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);
P Peter S Medlem sedan dec. 2002 5 483 inlägg Jag lade parametrarna fel. Se ovan :)
V Vinnaren Medlem sedan sep. 2005 833 inlägg 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?
Y yador Medlem sedan mars 2004 455 inlägg 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);
V Vinnaren Medlem sedan sep. 2005 833 inlägg tack, nu funkar det :bire