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

Problem z menu - Switch\Case

Ostatnio zmodyfikowano 2010-11-24 20:51
Autor Wiadomość
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.

C/C++
#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 ); //dodałem drugie cin i zaczęło działać
            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

P-24466
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
C/C++
cin >> menu;
wywołując:
C/C++
cin.sync();
będziesz mógł wtedy użyć jednego getline
P-24467
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 ;-)
P-24468
« 1 »
  Strona 1 z 1