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

Switch/Klasy/getline

Ostatnio zmodyfikowano 2011-04-11 15:58
Autor Wiadomość
Elano92
Temat założony przez niniejszego użytkownika
Switch/Klasy/getline
» 2011-04-11 12:58:33
C/C++
#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 .
P-30599
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ś.
P-30602
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 ?
P-30604
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
C/C++
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)

C/C++
#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;
   
}
P-30605
Elano92
Temat założony przez niniejszego użytkownika
» 2011-04-11 15:58:46
dzięki , zrozumiałem
P-30606
« 1 »
  Strona 1 z 1