Getline() w C++ po wpisaniu im. i nazwiska kończy działanie


(Lord218) #1

Witam.

Mam problem ze wczytaniem imienia i nazwiska do jednego stringa (bo tak potrzebuję).

Próbowałem użyć getlin'a, ale program po wpisaniu imienia i nazwiska kończy działanie.

http://4programmers.net/Pastebin/2598 - kod programu

Co może być przyczyna i jak to naprawić?


(kostek135) #2
  1. W tym kodzie nie ma getline() skad mamy wiedzieć jak go używasz?

  2. Nie podałeś formatu danych, który wczytujesz, np.

    Jan

    Nowak

nie zadziała z getline() tak jak chcesz 3. getline() działa 4. Przyczyn może być wiele, ale prawdopodobnie, nie umiesz używać stl-a 5. Możesz to "naprawić" (celowo wzięte w cudzysłów, bo nic zepsute nie jest) np. wczytując dwa napisy, a następnie wykonując na nich konkatenację. Szybki przykład potwierdzający, że getline() działa (g++ 4.7.x):

#include 

#include 


int main () {

	std::string name_and_surname;


	std::cout << "Please, enter your name and surname: ";

	std::getline (std::cin,name_and_surname);

	std::cout << "Hello, " << name_and_surname << "!\n";


	return 0;

}

IN:

Jan Nowak

OUT:

Hello, Jan Nowak!

(Lord218) #3

O kurcze nie ten kod dałem już się poprawiam: http://4programmers.net/Pastebin/2614

No i właśnie powinno być jak napisałeś, a u mnie program coś kiepści. Albo ja coś zkiepściłem.

-- Dodane 18.11.2013 (Pn) 14:47 --

PS: Format wczytywania powinien być taki:

imię nazwisko

liczba

i tu następna operacja a nie koniec programu.


(kostek135) #4

Masz problem z utrzymaniem czytelności kodu (sam się gubisz), bo pogwałciłeś wszystkie możliwe zasady pisania czytelnego kodu.

Twój format powinien być taki (według tego co jest w kodzie)

Liczba aktorów

Numer operacji

Imię i Nazwisko

Liczba fanów

Numer operacji

Imię i Nazwisko

Liczba fanów

Numer operacji

Imię i Nazwisko

Liczba fanów

...

Dodatkowo brakuje cin.ignore() przed wywołaniem getline(). cin zostawia w strumieniu '\n' i to może być przez to.

Generalnie po pierwsze popraw czytelność. Oddziel wczytywanie danych od logiki aplikacji. Konstruktor to chyba najmniej odpowiednie miejsce do czytania danych. Głownie dlatego, że z punktu logicznego obiekt już istnieje, a jeśli kiedykolwiek wprowadzisz walidację danych, to obiekt w przypadku niezaliczenia jej, nie powinien zostać utworzony. Ponadto takim stylem programowania silnie wiążesz swoja klasę z jedynym słusznym sposobem wprowadzania danych. O wiele lepiej po prostu przekazać te dane jako zależności.


(Lord218) #5

Ok dzięki za pomoc :slight_smile:

-- Dodane 19.11.2013 (Wt) 22:03 --

http://4programmers.net/Pastebin/2622

Co mam źle, że wyszukiwanie aktora nie działa mi jak należy?

Podejrzewam coś w funkcji szukającej, ale nie wiem co?