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

Czekanie na odpowiedź użytkownika

Object Storage Arubacloud
0 głosów
611 wizyt
pytanie zadane 18 kwietnia 2019 w C i C++ przez Rajzok Początkujący (390 p.)

Dzień dobry :-) Piszę program w C++,  jest to kreator państw (tworzę grę). Ma on za zadanie zebrać dane i zapisać je w pliku tekstowym. Wszystko działa dobrze, jednakże przy pytaniu o nazwę stolicy program nie czeka na odpowiedź od użytkownika. Wysyłam część kodu, w której znajduje się powyższe zapytanie. W tym programie zmienna string przechowująca nazwę stolicy to m1_nazwa .

default:
        cout << "Wprowadzona liczba niczego nie okresla";
    }
    system("cls");

    //wybor nazwy stolicy (m1_nazwa)

    cout << "Wpisz nazwe stolicy: "; getline(cin, m1_nazwa);

    //pierwsza funkcja stolicy to domyslnie administracyjna (m1_funkcja1)
    //wybor drugiej funkcji stolicy (m1_funkcja2)

    cout << "Domyslnie pierwsza funkcja stolicy to administracyjna." << endl;
    cout << "Wybierz druga inna funkcje stolicy" << endl;
    cout << "1. Obronna" << endl;
    cout << "2. Przemyslowa" << endl;
    cout << "3. Uslugowa" << endl;
    cout << "4. Handlowa" << endl;
    cout << "5. Transportowa" << endl;
    cout << "6. Edukacyjna" << endl;
    cout << "7. Turystyczna" << endl;
    cout << "8. Uzdrowiskowa" << endl;
    cout << "9. Religijna" << endl;
    cout << "Twoj wybor: "; cin >> wybor;

 

komentarz 18 kwietnia 2019 przez jankustosz1 Nałogowiec (35,880 p.)
Wypisz co siedzi w m1_nazwa po getlinie

Obstawiam że wcześniej używałeś cina i są w nim dane z poprzedniej linii

2 odpowiedzi

+1 głos
odpowiedź 19 kwietnia 2019 przez j23 Mędrzec (194,920 p.)
wybrane 20 kwietnia 2019 przez Rajzok
 
Najlepsza

Jeśli czytasz przed std::getline jakąś liczbę operatorem >>, wtedy musisz ściągnąć ze strumienia znak końca linii. Najprościej użyć do tego manipulatora std::ws:

std::cin >> v;

std::getline(std::cin >> std::ws, line);

 

komentarz 20 kwietnia 2019 przez Rajzok Początkujący (390 p.)
OK, ale gdzie w tym kodzie wpisać nazwę zmiennej m1_nazwa, aby mogło się to do niej zapisać?
komentarz 20 kwietnia 2019 przez Rajzok Początkujący (390 p.)
Już nieważne ;-) , wpisałem m1_nazwa zamiast line i wszystko działa jak należy. Dzięki wielkie, pozdrawiam i zdrowych, wesołych świąt wielkanocnych :-)
+2 głosów
odpowiedź 19 kwietnia 2019 przez gagyn Stary wyjadacz (11,050 p.)

Sprawdź co program zapisuje do zmiennej m1_nazwa, tak jak już napisał @jankustosz1, być może zostały w buforze jakieś dane, które są wczytywane do tej zmiennej zanim użytkownik zdąży cokolwiek zrobić.

Ewentualnie możesz spróbować np. cin.sync().

Więcej: https://stackoverflow.com/questions/257091/how-do-i-flush-the-cin-buffer

komentarz 19 kwietnia 2019 przez Szahid Pasjonat (20,930 p.)
Kolega wyżej najpewniej ma racje ze cos zalega w buforze. Pewnie wczesniej uzyleś cin, który zostawia za sobą znak nowej lini i getline go pobiera. Zwroc uwage  na druga od góry odpowiedz z tego linku  wyzej.

Druga możliwoscia jest  to że objekt cin moze być "uszkodzony" w skutek wprowadzenia wczesniej niepoprawnych danych. Aby to naprawić musisz wyczyscić bufer(druga odpowiedz z linku powyzej) i wycyscić flagi błędów za pomocą cin.clear()
komentarz 20 kwietnia 2019 przez Rajzok Początkujący (390 p.)

@gagyn, @Szahid

Okazało się, że to problem ze znakiem końca linii, który tam zalegał, przez co getline pobierał pustą linijkę. Wystarczyło  wpisać:

std::getline(std::cin >> std::ws, nazwa_zmiennej)

Teraz wszystko działa. Dzięki za pomoc i wesołych, zdrowych świąt wielkanocnych ;-)
 

Podobne pytania

0 głosów
4 odpowiedzi 1,789 wizyt
pytanie zadane 15 grudnia 2017 w C i C++ przez n0s1gnal Użytkownik (700 p.)
+2 głosów
3 odpowiedzi 258 wizyt
pytanie zadane 13 grudnia 2021 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 818 wizyt
pytanie zadane 13 kwietnia 2019 w C i C++ przez Rajzok Początkujący (390 p.)

92,573 zapytań

141,423 odpowiedzi

319,647 komentarzy

61,959 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!

...