Dziwne zachowanie programu przez zmienną ze spacjami

0

Witajcie. Stworzyłem program, coś na wzór magicznej ósmej bili (która losuje odp. na pytanie ;P), lecz gdy do zmiennej Pytanie (zadekl. jako string) przypisuje sie przez cin'a łańcuch znaków ze spacją/spacjami, to pętla do wykonuje mi sie 3 razy, zaś gdy spacje znikną (np. zastąpie je kropkami bądź czymkolwiek jeszcze) - wszystko działa okej. Miałem do tej pory tak ze WSZYSTKIMI programami jakie tworzyłem.

oto kod:

// Wirtualny Paweł

#include <iostream>
#include <conio.h>

using namespace std;

const int IloscOdpowiedzi = 30;

int main()
{
    // Wstępniak i dane osobowe
    cout << "Witaj! Jestem Pawel Ilnicki, a ty?" << endl;
    string Imie;
    cout << "IMIE --> ";
    cin >> Imie;
    cout << "W czym ci mam pomoc? Napisz swoj pytanie, a podpowiem ci najlepsza decyzje!" << endl;
    cout << "(info: wpisz exit by zakonczyc dzialanie glupiej melepety ;)" << endl;
    
    bool RozkazExit = false;
    
    do {
        // Pytanie
        string Pytanie;
        cout << "TWOJE PYTANIE -->";
        cin >> Pytanie;
        
        // Czy użytkownik chce zakończyć działanie programu?
        if (Pytanie == "exit")
        {
                    RozkazExit = true;
        }
    
        // Losowanie ziarna dla odpowiedzi
        srand(static_cast<unsigned int>(time(NULL)));
        int ZiarnoOdpowiedzi = rand() % IloscOdpowiedzi + 1;
    
        switch (ZiarnoOdpowiedzi)
        {
               // Odpowiedzi pozytywne.
               case 1: cout << "Pewnie! " << endl << endl; break;
               case 2: cout << "Jasne! " << endl << endl; break;
               case 3: cout << "Bez watpienia! " << endl << endl; break;
               case 4: cout << "Raczej tak. " << endl << endl; break;
               case 5: cout << "Haha, i ty sie jeszcze pytasz - TAK! " << endl << endl; break;
               case 6: cout << "TAK, TAK i jeszcze raz TAK " << endl << endl; break;
               case 7: cout << "Bez cienia zwatpienia mowie ze tak. " << endl << endl; break;
               case 8: cout << "Chyba tak. " << endl << endl; break;
               case 9: cout << "Mysle ze... tak. " << endl << endl; break;
               case 10: cout << "Zgadzam sie z tym. " << endl << endl; break;
               
               // Odpowiedzi negatywne
               case 11: cout << "Nie wydaje mi sie. " << endl << endl; break;
               case 12: cout << "Raczej nie. " << endl << endl; break;
               case 13: cout << "No co ty, w zyciu NIE! " << endl << endl; break;
               case 14: cout << "O nie, w zyciu sie z toba nie zgodze! " << endl << endl; break;
               case 15: cout << "Na pewno nie. " << endl << endl; break;
               case 16: cout << "Boj sie boga " << Imie << "!  " << endl << endl; break;
               case 17: cout << Imie << " - brak ci piatej klepki? " << endl << endl; break;
               case 18: cout << "Lepiej bym sie nad tym zastanowil... " << endl << endl; break;
               case 19: cout << "Nie. " << endl << endl; break;
               case 20: cout << "Nie ma o tym mowy, wez przestan! " << endl << endl; break;
               
               // Odpowiedzi neutralne
               case 21: cout << "No... tu bym sie spieral. " << endl << endl; break;
               case 22: cout << "No nie wiem... " << endl << endl; break;
               case 23: cout << "Trudne pytanie, wiesz? " << endl << endl; break;
               case 24: cout << "To zalezy... " << endl << endl; break;
               case 25: cout << "Hm.... musial bym sie gleboko zastanowic. " << endl << endl; break;
               case 26: cout << "No tym pytaniem przesadzilas... " << endl << endl; break;
               case 27: cout << "Nie mam zielonego pojecia! " << endl << endl; break;
               case 28: cout << "Watpie w to. " << endl << endl; break;
               case 29: cout << "Hahaha, no tym mnie rozwaliles! " << endl << endl; break;
               case 30: cout << "Jak uwazasz, mnie to bez roznicy... " << endl << endl; break;
               
               // Zabezpieczenie przez błędem
               default: cout << "IOS Error: Grain has higher value than constant variable AnswersNum! ;P" << endl << endl;
        }
    } while (RozkazExit == false);
    
    return 0;
    getch();
}
0

no i prawidłowo, bo cin >> czyta pojedyncze słowa (do spacji).
Żeby odczytać całą linię, użyj getline(cin, jakisString);

0

gdy zrobię takie coś:

string PytanieWrazliweNaSpacje;
cout << "TWOJE PYTANIE -->";
cin >> PytanieWrazliweNaSpacje;
string PytanieWyleczone = getline(cin, PytanieWrazliweNaSpacje);

to wyskakuje błąd 27 C:\Users\Paweł\Documents\Ćwiczenia w C++\wp.cpp conversion from std::basic_istream<char, std::char_traits<char> >' to non-scalar type std::basic_string<char, std::char_traits<char>, std::allocator<char> >' requested

0

Eh. Wyleciała Ci dyrektywa:
#include <string>

0

Żle czynisz ;-P
getline() nie zwraca i nie pobiera stringa w ten sposób.
Zgodnie z Twoją nomenklaturą:

string PytanieWyleczone;
cout << "TWOJE PYTANIE -->";  
//mówisz getline() skąd czytać i dokąd zapisać
getline(cin, PytanieWyleczone); 
//tekst siedzi teraz już w zmiennnej
 //sprawdźmy to
cout << PytanieWyleczone; 
 

I gotowe ;-)

PS:

     return 0;
    getch();

;-D Getch nie powinno mieć nic do gadania, bo program się na returnie kończy.
Tu masz poprawne sposoby trzymania - Zatrzymanie okna programu

0

dzięki, temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1