[C++] Pętla while/do while
Ostatnio zmodyfikowano 2016-04-30 22:27
Goździk4 Temat założony przez niniejszego użytkownika |
[C++] Pętla while/do while » 2016-04-30 16:35:56 Witam, Jestem tu nowy. Potrzebuję pomocy w rozwiązaniu problemu, moim zdaniem dość banalnego, ale mi się nie udaje. I chyba najlepszym rozwiązaniem będzie użycie pętli while.
Otóż tak, mam takie coś:
cout << "Podaj imie: " << endl; getline(cin, imie);
if (!imie.empty()) { throw std::exception("Musisz podac imie"); }
I chciałbym aby to działało w pętli do póki podamy imię, a jeśli go nie podamy to ma się wyświetlać informacja z wykorzystaniem wyjątku, podany wyżej kod jest z plikiem cpp(od klasy), a try wywołanie tego wyjątku jest w main'ie.
Kod z main:
int main()
{ try { Student s; s.wyswietl("a", "b", 1); } catch (const std::exception& e) { cout << e.what() << endl; }
getch();
}
Z góry będę bardzo wdzięczy za pomoc :)
|
|
carlosmay |
» 2016-04-30 19:07:29 while( std::getline( std::cin, name ) &&( name.empty() ) { } |
|
Goździk4 Temat założony przez niniejszego użytkownika |
» 2016-04-30 21:53:07 while( std::getline( std::cin, name ) &&( name.empty() ) { }
Nie dokończa działa to co napisałeś.
Podaję przykładowe działanie programu:
Podaj imię: " " // Nie wpisuję imienia(Naciskam bezpośrednio Enter) Musisz podać imię ! //Wyrzuca błąd z wyjątku ze stosownym komunikatem Podaj imię: //Informacja aby znowu podać imię Jan //Jeśli podam jakiś ciąg znaków to wychodzę z pętli (a jeśli znowu bym nie podał to znów komunikat z wyjątku)
|
|
Monika90 |
» 2016-04-30 22:02:56 Otóż tak, mam takie coś:
cout << "Podaj imie: " << endl; getline(cin, imie);
if (!imie.empty()) { throw std::exception("Musisz podac imie"); }
|
Ale gdzie to masz? W konstruktorze klasy Student? |
|
Goździk4 Temat założony przez niniejszego użytkownika |
» 2016-04-30 22:14:55 Nie. W funkcji
Wycinek z pliku: #include "Student.h"
Student::Student() { }
Student::~Student() { }
void Student::wyswietl(string i, string n, int w) { i = imie; n = nazwisko; w = wiek;
cout << "Podaj imie: " << endl; getline(cin, imie);
if (imie.empty()) { throw std::exception("Musisz podac imie"); }
. . .
|
|
carlosmay |
» 2016-04-30 22:19:03 !imie.empty() to przeczy temu jak ma działać pętla. Powtarzaj gdy nie jest pusty. edit: { std::string imie; std::cout << "Podaj imie" << std::endl; while( std::getline( std::cin, imie ) &&( imie.empty() ) ) { std::cerr << "Podaj imie" << std::endl; } }
Dostosuj pętlę do potrzeb. |
|
Goździk4 Temat założony przez niniejszego użytkownika |
» 2016-04-30 22:27:07 Ok. Wszystko działa. Dziękuję za pomoc. |
|
« 1 » |