witam. mam problem z programem sortującym. ma on sortować pracowników wg imienia, nazwiska i pensji. program się kompiluje jednak w pierwszej pętli for (i=0;i<5;i++) coś jest chyba nie tak. uruchamiam program, wpisuje imię i nazwisko pierwszego pracownika potem jego pensje wciskam enter a na ekranie pojawia się “Podaj imie i nazwsko 2-ego pracownika: Podaj pensje” wciskam enter i dalej “Podaj imie i nazwisko 3-ego pracownika: Podaj pensje” i tak dla wszystkich 5 pracowników. Tak jakby program wykonał tylko raz funkcje getline a potem ja omijał. mimo ze znajduje ona się w pętli for. proszę o pomoc. zależy mi na czasie. pozdrawiam i z góry dziękuje za jakikolwiek odzew.
#include
#include
#include
using namespace std;
struct Pracownik{
int pensja;
string imie;
string nazwisko;
};
int main()
{
int i,j,wybor;
string osoba;
Pracownik osoby[5];
Pracownik temp;
int wsk;
for (i=0;i<5;i++)
{
cout<<"Podaj imie i nazwisko "<
getline(cin, osoba); // pobiera cala linie az do entera
wsk = osoba.find(" "); // szuka spacji i umiesci gdzie sie ona znajduje w 'wsk'
osoby[i].imie = osoba.substr(0, wsk); // wycina imie, czyli ciag znakow do spacji
osoby[i].nazwisko = osoba.substr(wsk+1); //wycina nazwisko, jeden znak po spacji az do konca ciagu znakow
cout<<"Podaj pensje: ";
cin>>osoby[i].pensja;
}
system("cls");
cout<<"1. Sortowanie wg. imienia"<
cout<<"2. Sortowanie wg. nazwiska"<
cout<<"3. Sortowanie wg. pensji"<
cout<<"0. Wyjscie z programu";
cin>>wybor;
system("cls");
switch (wybor){
case 1:
for (i=0;i<4;i++)
for (j=i+1;j<5;j++)
if (osoby[i].imie>osoby[j].imie)
{
temp=osoby[i];
osoby[i]=osoby[j];
osoby[j]=temp;
}
break;
case 2:
for (i=0;i<4;i++)
for (j=i+1;j<5;j++)
if (osoby[i].nazwisko>osoby[j].nazwisko)
{
temp=osoby[i];
osoby[i]=osoby[j];
osoby[j]=temp;
}
break;
case 3:
for (i=0;i<4;i++)
for (j=i+1;j<5;j++)
if (osoby[i].pensja>osoby[j].pensja)
{
temp=osoby[i];
osoby[i]=osoby[j];
osoby[j]=temp;
}
break;
default:
break;
}
for (i=0;i<5;i++)
cout<
getch();
}[/code]
Nie wiem czy to ma związek z problemem, ale wcześniej zamiast funkcji getline miałem zwykłe cin i nie było konieczności rozdzielania imienia i nazwiska poprze find i substr. wtedy wszystko było ok, jednak wykładowca nakazał aby program wczytywał imię i nazwisko getlinem i je potem rozdzielał.
PS program próbowałem na dwóch komputerach z windows 7 i programem DevC++ na obu to samo…