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

std::cin, białe znaki

Cloud VPS
0 głosów
1,575 wizyt
pytanie zadane 22 września 2017 w C i C++ przez Resmittieno Początkujący (280 p.)
edycja 22 września 2017 przez criss
#include <iostream>

using namespace std;
string nick,pochodzenie,jestes,lubisz,chcesz,wybor ;
#include <cstdlib>
int main()
{
    do
    {
       cout << "Witaj w grze! v2" << endl;
       cout  <<endl ;

       cout << "Jak sie nazywasz:" ;
       cin  >> nick ;
       cout  <<endl ;



       cout << "Skad pochodzisz:" ;
       cin >> pochodzenie ;
       cout  <<endl ;

       cout << "Co lubisz:" ;
       cin >> lubisz ;
       cout  <<endl ;

       cout << "Po co zyjesz:" ;
       cin >> chcesz ;
       cout  <<endl ;


       cout << "Nazywasz sie:" <<nick<< " Pochodzisz z:" <<pochodzenie<< " Lubisz:" <<lubisz<< " Chcesz:" <<chcesz ;
       cout  <<endl ;
       cout  <<endl ;
       cout << "Chcesz zaczad od nowa tak/nie:" ;
       cin >> wybor ;
       system ("cls") ;

    }
while (wybor=="tak") ;





    return 0;
}

Kiedy napiszę nazwę/imię itp. składającą się z dwóch członów, to cout pod spodem jest pomijany, jak temu zaradzić? 

2 odpowiedzi

+2 głosów
odpowiedź 22 września 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 22 września 2017 przez criss
 
Najlepsza

Nie wiem czy dobrze Cię zrozumiałem. Chodzi Ci o to, że jest pomijany std::cin? Jeśli tak, to dzieje się tak dlatego, że:

std::cin >> napis;

Wczytuje dane tylko do białego znaku, resztę pozostawia w buforze, a z tego bufora zczytuje następne wywołanie std::cin.

Jeśli chcesz temu zaradzić, użyj std::getline(). Ta funkcja pobierze dane aż do końca linii (lub innego znaku, jest to zależne od opcjonalnego parametru).

std::getline(std::cin, napis);

Informacje na temat tej funkcji znajdziesz tutaj

 

komentarz 22 września 2017 przez Resmittieno Początkujący (280 p.)
Chodzi o to,że kiedy w "Jak się nazywa" napiszę Jan Nowak to "Skad pochodzisz" jest pomijane tj. nic tam napisac nie mozna i od razu przechodzi dalej
komentarz 22 września 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
No to dobrze Cię zrozumiałem.
komentarz 22 września 2017 przez Resmittieno Początkujący (280 p.)
Faktycznie działa,dziękuję ! :)

Tylko jedno pytanie,po co pisać std :: ? Skoro using namespace std; to niweluje ?
komentarz 22 września 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Ja osobiście nie zalecam stosowania dyrektywy using. To, że napisałem z std:: to kwestia mojego przyzwyczajenia, w Twoim kodzie faktycznie, nie jest to potrzebne.

Niemniej jednak zachęcam do przeczytania: http://blog.malcom.pl/2009/korzystanie-z-przestrzeni-nazw-w-cpp.html
+1 głos
odpowiedź 22 września 2017 przez Jarver Użytkownik (820 p.)

//...
       cout << "Jak sie nazywasz:" ;
       getline(cin,nick);
       cout  <<endl ;
//...

 

Możesz skorzystać z funkcji getline w ten sposób, jak napisał kolega wyżej, dzięki temu pobierze Ci cały ciąg znaków. Zauważ, że gdy wpisze w imie np. "a b c" to pominie Ci trzy kolejne ciny :) i zapisz do nich te wartości które podałeś po spacji. Sprawdź to sobie. Natomiast używając getline(cin,x); możesz wpisywać do woli.
 

 

komentarz 22 września 2017 przez Resmittieno Początkujący (280 p.)
Tak jak wyżej,dziękuję ;v

Podobne pytania

0 głosów
0 odpowiedzi 851 wizyt
pytanie zadane 4 października 2017 w PHP przez Mavimix Dyskutant (8,420 p.)
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 19 lutego 2021 w C i C++ przez sebaaas Początkujący (350 p.)
0 głosów
1 odpowiedź 250 wizyt
pytanie zadane 12 marca 2016 w C i C++ przez adamszu Użytkownik (930 p.)

93,488 zapytań

142,422 odpowiedzi

322,773 komentarzy

62,908 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

Kursy INF.02 i INF.03
...