• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program omija funkcję getline

Object Storage Arubacloud
0 głosów
1,898 wizyt
pytanie zadane 20 października 2015 w C i C++ przez spvce Początkujący (260 p.)
#include <iostream>
#include <string>

using namespace std;

void menu();
void zastap(string zdanie);

int main()
{
    string zdanie="Marek szuka dziecka";
    cout << "Zadanie jest zdanie: " << zdanie << endl;

    menu();
    int wybor;
    cout << "Twoj wybor: "; cin >> wybor;

    switch(wybor)
    {
    case 1:
    zastap(zdanie);
    break;
    }

    return 0;
}

void menu()
{
    cout<<endl<<"MENU:"<<endl;
    cout<<"[1] Zastap dowolne slowo"<<endl;
}

void zastap(string napis)
{
    string slowa;
    string zamiennik;
    cout<<endl<<"Ktore slowa chcesz zastapic: ";              getline(cin, slowa);
    cout<<endl<<"jakim slowem/slowami chcesz je zastapic: ";  cin.ignore(); getline(cin, zamiennik);

    size_t pozycja=napis.find(slowa);
    int dlugosc=slowa.size();
    napis.replace(pozycja, dlugosc, zamiennik);

    cout << endl << "Nowo utworzone zdanie: " << napis;
}

Skończyłem 8 i 9 odcinek kursu pana Zelenta i postanowiłem stworzyć taki program używając podprogramów i paru funkcji bilbioteki string.

Problem jest taki, że program nie uznaje (całkowicie omija) to polecenie - 

getline(cin, slowa);

i odrazu przechodzi do następnej linijki pobierając linie ze strumienia input do zmiennej zamiennik.

Gdy użyję zamiast dwóch getline opcji cin>>slowa (wtedy mogę wprowadzić tylko jedno) i cin>>zamiennik(również jedno słowo) wszystko działa poprawnie. Chcę jednak aby użytkownik programu mógł wprowadzić więcej niż jedno słowo.

Gdzie leży problem?

1 odpowiedź

+1 głos
odpowiedź 20 października 2015 przez Radfler VIP (101,030 p.)
edycja 5 czerwca 2016 przez Radfler
 
Najlepsza

Używanie na zmianę std::cin i std::getline (operacji formatowanych i nieformatowanych) często powoduje wiele komplikacji. Użycie std::basic_istream::sync powinno pomóc:

std::cin.sync();

Wstaw tę linijkę zaraz przed użyciem std::getline (linijka 37).

Tutaj masz napisane co robi ta funkcja: http://en.cppreference.com/w/cpp/io/basic_istream/sync

Pozdrawiam!

komentarz 20 października 2015 przez spvce Początkujący (260 p.)
Niestety wstawienie tej linijki przed użyciem getline nie naprawiło problemu omijania tej funkcji.
Czy jest coś innego co mógłbym zrobić?
1
komentarz 20 października 2015 przez Radfler VIP (101,030 p.)

Trochę dziwne, bo u mnie zadziałało bez problemu. To zamiast sync użyj ignore.

komentarz 20 października 2015 przez Krawiec91 Pasjonat (19,600 p.)

Wstaw przed switchem w main():
 

cin.ignore();

 

komentarz 20 października 2015 przez spvce Początkujący (260 p.)
cin.ignore(); zaraz po string zamiennik pomogło! dzięki bardzo :)

Podobne pytania

0 głosów
1 odpowiedź 515 wizyt
0 głosów
1 odpowiedź 524 wizyt
pytanie zadane 11 czerwca 2015 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)
0 głosów
2 odpowiedzi 781 wizyt
pytanie zadane 8 czerwca 2015 w C i C++ przez Kazuhiro Użytkownik (910 p.)

92,566 zapytań

141,420 odpowiedzi

319,609 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...