Switch/Klasy/getline
Ostatnio zmodyfikowano 2011-04-11 15:58
Elano92 Temat założony przez niniejszego użytkownika |
Switch/Klasy/getline » 2011-04-11 12:58:33 #include <iostream> #include <conio.h> using namespace std;
class Lukasz { public: string tab[ 15 ]; string nazwa; string ul; string z, x, c; string data; void dane(); void miejsce(); void ur(); }; void Lukasz::dane() { cout << "jak sie nazywasz? " << endl; getline( cin, nazwa ); getline( cin, nazwa ); cout << "nazywasz sie " << nazwa << endl; } void Lukasz::miejsce() { cout << "gdzie mieszkasz? " << endl; getline( cin, ul ); getline( cin, ul ); cout << "mieszkasz " << ul << endl; }; void Lukasz::ur() { cout << "kiedy sie urodziles? " << endl; getline( cin, data ); getline( cin, data ); cout << "ur sie " << data << endl; }; int main() { Lukasz osoba; int b; cout << "[1] dane" << "\n" << "[2] miejsce" << "\n" << "[3] data urodzenia" << "\n" << "[4] wszystko" << endl; cin >> b; switch( b ) { case 1: osoba.dane(); break; case 2: osoba.miejsce(); break; case 3: osoba.ur(); break; case 4: osoba.dane(); osoba.miejsce(); osoba.ur(); break; default: cout << "blad \n"; break; } getch(); return 0; }
Pomóżcie opcja 4 nie działa poprawnie . |
|
DejaVu |
» 2011-04-11 14:10:17 Już widzę jak całe rzesze siadają do poprawiania Twojego programu bo coś 'nie działa'. Któryś raz z kolei udowadniasz, że chcesz aby Twoje problemy były rozwiązywane przez kogoś. |
|
Elano92 Temat założony przez niniejszego użytkownika |
» 2011-04-11 14:56:07 "szukam pomocy" jak sama nazwa mówi ,że potrzebuje rozwiązać jakiś problem , a to moja już sprawa w jaki sposób chcę tego dokonać ... Zmien nazwe tego działu , "tylko dla kozaków" ... "Pobranie konkretnych danych z pliku" tu kolega też nie wie jak się za to zabrać i mu piszesz .... a mnie traktujesz gorzej ? |
|
ison |
» 2011-04-11 15:49:49 problem leży w tym że używasz cin i nie czyścisz bufora po wczytaniu cinem w buforze zostaje znak nowej linii, gdy potem używasz getline (który wczytuje aż do napotkania pierwszego znaku nowej linii) wczytujesz ten znak, a dopiero drugim getlinem wczytujesz to co aktualnie wpiszesz - z tego powodu jeśli wybierasz którąś z opcji 1-3 program działa, problem pojawia się wtedy gdy wczytujesz kilka razy z rzędu funkcją getline - po wczytaniu getlinem znak nowej linii nie zostaje w buforze dlatego jeśli piszesz getline(...); getline(...);
to program będzie czekał aż podasz 2 linie (a nie 1 tak jak to było w przypadku kiedy używałeś getline po cin) usuń wszystkie zdublowane getline a po cin czyść bufor (tak żeby pozbyć się znaku nowej linii) #include <iostream> #include <conio.h> using namespace std;
class Lukasz { public: string tab[ 15 ]; string nazwa; string ul; string z, x, c; string data; void dane(); void miejsce(); void ur(); }; void Lukasz::dane() { cout << "jak sie nazywasz? " << endl; getline( cin, nazwa ); cout << "nazywasz sie " << nazwa << endl; } void Lukasz::miejsce() { cout << "gdzie mieszkasz? " << endl; getline( cin, ul ); cout << "mieszkasz " << ul << endl; }; void Lukasz::ur() { cout << "kiedy sie urodziles? " << endl; getline( cin, data ); cout << "ur sie " << data << endl; }; int main() { Lukasz osoba; int b; cout << "[1] dane" << "\n" << "[2] miejsce" << "\n" << "[3] data urodzenia" << "\n" << "[4] wszystko" << endl; cin >> b; cin.sync(); cin.clear(); switch( b ) { case 1: osoba.dane(); break; case 2: osoba.miejsce(); break; case 3: osoba.ur(); break; case 4: osoba.dane(); osoba.miejsce(); osoba.ur(); break; default: cout << "blad \n"; break; } getch(); return 0; }
|
|
Elano92 Temat założony przez niniejszego użytkownika |
» 2011-04-11 15:58:46 dzięki , zrozumiałem |
|
« 1 » |