Problem z menu - Switch\Case
Ostatnio zmodyfikowano 2010-11-24 20:51
DarkDragon Temat założony przez niniejszego użytkownika |
Problem z menu - Switch\Case » 2010-11-24 20:09:44 Witam,
jestem początkujący w C++ i aktualnie przerabiam sobie kurs ze strony http://kursy.ddt.pl/?LessonId=14 i zatrzymałem się na ćwiczeniu 7.6. Należy stworzyć prostą bazę danych, ale nie z tym mam problem, więc już na temat.
Stworzyłem proste Menu za pomocą Switch jednak w Case '1' napotkałem problem, ponieważ program automatycznie pomija możliwość wprowadzenia danych dotyczących marki samochodu i przechodzi od razu do jego modelu. Gdy markę i model połączyłem w jedno, to została ona pominięta i program przechodził do wprowadzenia pojemności.
#include<iostream> #include<conio.h> #include<ctype.h>
using namespace std;
int main() { const short rozmiar = 30; char menu; char marka[ rozmiar ]; char model[ rozmiar ]; char litera; int pojemnosc, predkosc; do { cout << "Menu bazy danych" << endl << endl; cout << "1. Wprowadz dane samochodu" << endl; cout << "2. Edytuj baze danych" << endl; cout << "3. Usun z bazy danych" << endl; cout << "4. Wyjscie" << endl << endl; cout << "Co chcesz zrobic?" << " : "; cin >> menu; cout << endl; switch( menu ) { case '1': cout << " Podaj marke samochodu" << " - "; cin.getline( marka, rozmiar ); cin.getline( marka, rozmiar ); cout << endl; cout << " Podaj model samochodu" << " - "; cin.getline( model, rozmiar ); cout << endl; cout << " Podaj pojemnosc silnika" << " - "; cin >> pojemnosc; cout << endl; cout << " Podaj predkosc maksymalna" << " - "; cin >> predkosc; cout << endl; break;
Moje pytanie brzmi, dlaczego potrzeba drugiego cin, żeby to zadziałało tak jak założyłem, bo jakoś logicznie nie potrafię tego sobie wytłumaczyć, gdzie popełniłem błąd i proszę Was o pomoc, bo raczej tak nie powinno być, mimo że program zaczął dziać? Używam środowiska Dev-C++ 4.9.9.2.
Z góry dziękuję
Pozdrawiam
|
|
ison |
» 2010-11-24 20:26:20 Ponieważ cin'em wczytałeś tylko to co było przed białym znakiem, sam biały znak został w buforze gdzie został wczytany dopiero przy getline. wyczyść bufor tuż po wywołując: będziesz mógł wtedy użyć jednego getline |
|
DarkDragon Temat założony przez niniejszego użytkownika |
Pomoc » 2010-11-24 20:51:00 Hmm... Czyli na przyszłość warto zawsze wyczyścić bufor przed wczytywaniem łańcucha znaków, aby uniknąć problemów na przyszłość. Dzięki za pomoc, już się czegoś więcej nauczyłem ;-).
Pozdrawiam ;-) |
|
« 1 » |