Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Pętla while/do while

Ostatnio zmodyfikowano 2016-04-30 22:27
Autor Wiadomość
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 :)
P-147789
carlosmay
» 2016-04-30 19:07:29
while( std::getline( std::cin, name ) &&( name.empty() ) { }
P-147797
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)
P-147809
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?
P-147810
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");
}


.
.
.
P-147812
carlosmay
» 2016-04-30 22:19:03
!imie.empty()
 to przeczy temu jak ma działać pętla.
Powtarzaj gdy nie jest pusty.

edit:
C/C++
{
    std::string imie;
   
    std::cout << "Podaj imie" << std::endl;
    while( std::getline( std::cin, imie ) &&( imie.empty() ) ) { // zgubiłem nawias w pierwszym przykładzie
        std::cerr << "Podaj imie" << std::endl;
    }
}
Dostosuj pętlę do potrzeb.
P-147813
Goździk4
Temat założony przez niniejszego użytkownika
» 2016-04-30 22:27:07
Ok. Wszystko działa. Dziękuję za pomoc.
P-147814
« 1 »
  Strona 1 z 1