Skocz do zawartości

getline function niedziala


# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

a więc staram się podszlifować a raczej zbudować jakąś wiedzę na temat programowania. Tylko mam problem gdyż gdy chcę użyć funkcji getline(cin, dane) to niedaje mi ona możliwości wpisania czegokolwiek tylko przeskakuje do ostatniego couta gdzie string u mnie określony jako dane miał wypisać w konsoli imie i nazwisko wczesniej do konsoli w wpisane. Więc z racji tego że cin nieodczytuje również spacji po słowie (np. cin>>nick ; cout<<nick<<endl; i jeśli wpisze Lexik HvH to wypisze mi tylko Lexik) I chce żeby również wypisało mi dane po spacji i samą spacje.Więc zauważyłem że gdzieś chłop użył takowej funkcji getline podał też odpowiednia (chyba) biblioteke #include <string> więc spróbowałem jej użyć ale wynik mojego nieudolnego używania jej można zaobserwować niżej. Używam visual studio (chłop używał Cliona z jetbrainsów czy jakoś tak niemam pojęcia nieznam się) i dodatkowo dodawał & przed cin i przed wcześniej określoną zmienna ale jak ja to dodałem to wywalało mi błędy. Zamieszczam screeny niżej jak to wygląda w konsoli,screen sourcodu i sam source code.

image.thumb.png.8060fd83bc4584796a50e2ad3dad1b8a.png

image.thumb.png.2b4e38b01ea586c4314d47592eaa5c79.png

#include <iostream>
#include <string>
using namespace std;

int main()
{

    string marek;
    string a, b, c;

    cout << "pet name: ";
    cin >> a;
    cout << "mothers maiden name: ";
    cin >> b;
    cout << "date of birth: ";
    cin >> c;
    cout << "Name and surname: ";
    
    getline( cin, marek);
    
    string questions[3] = { a, b, c, };
    cout << questions[0] + " " + questions[1] + " " + questions[2] + " oraz nazywasz sie" + marek << endl;
    
    return 0;
}

 

Błąd który mi wyskakuje jeśli dopisze & przed cin i przed zmienną czyli getline(&cin, &variable) tak jak gość z poradnika:

image.thumb.png.7431a1ec54dc119c9e0bda45727d421a.png

 

Problem w tym że normalnie bez niczego bez tego arraya bez innych coutow etc jak zrobie ją samą jedno pytanie i cout potem to działa bez problemu a pisze ją identycznie więc nwm w czym jest tutah problem jeśli mógłby ktoś wytłumaczyć to byłbym bardzo wdzięczny.

Odnośnik do komentarza

Przykład gdzie mi ta funkcja działa:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string dudu;
    cout << "wpisz imie i nazwisko wybranego polityka: ";
    getline(cin, dudu);
    cout << "-----------------" << endl;
    cout << dudu <<endl ;

    return 0;
}

 

Screen z konsoli gdzie funkcja działa poprawnie (użyty kod z wyżej):

  • image.thumb.png.dea48d49ffe31eea812e870515b7018f.png

 

Wydaje mi się żę identycznie jest ta funkcja użyta w wypowiedzi mojej wyżej (tej pierwszej) i niemam pojęcia dlaczego niedziała w tamtym przypadku skoro przykładowo tutaj ona działa

 

 

Dobra nieważne poradziłem sobię sam ale dla potomnych wytłumacze.

Przed samą funkcją getline jeśli wcześniej zapisywało się coś (najczęściej jeśli było to po prostu cin>>) to cin niezalicza ani spacji ani enter jako klawiszy które mogłoby zapisać natomiast getline je już uznaje. Po każdym wpisaniu rzeczy do cin trzeba kliknąć enter żeby móc dalej wpisać coś do kolejnego. Ale z racji że entery niezostał użyte do zapisania zmiennej w samym cin to zostały tymczasowo umieszczone w pamieci RAM przez co jak dojdzie się już do funkcji getline to z racji że ona może takowych enterów użyć to bez naszego zaangażowania zostają one wpisane i nasz input do konsoli w tej sprawie zostaje pominiety.

Można zapobiec temu dzięki funkcji cin.ignore()

 

Naprawiony source code:

#include <iostream>
#include <string>
using namespace std;

int main() {


    string marek;
    string a, b, c;

    cout << "pet name: ";
    cin >> a;
    cout << "mothers maiden name: ";
    cin >> b;
    cout << "date of birth: ";
    cin >> c;
    cout << "Name and surname: ";

    cin.ignore();
    getline(cin, marek);

    string questions[3] = { a, b, c, };
    cout << questions[0] + " " + questions[1] + " " + questions[2] + " oraz nazywasz sie " + marek << endl;


    return 0;
}

Z góry przepraszam jeśli zaśmieciłem troche forum naprawdę niemiałem pojęcia jak naprawić ten błąd ale na szczęśce już wiem. Dla osób które mogłyby mieć podobny problem wytłumaczyłem wyżej czemu nie działało.

image.png

Odnośnik do komentarza

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności