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

Dziwny błąd podczas sprawdzania wartości zmiennej typu string.

0 głosów
134 wizyt
pytanie zadane 20 kwietnia 2019 w C i C++ przez Rafep Nowicjusz (170 p.)

Cześć! Ostatnio zacząłem swoją przygodę z C++. Podczas pisania programu znalazłem dziwny błąd.

Mam taki oto kod:

string text;

int main()
{
    for(int i = 0; i = 1; i)
    {
        cin >> text;
        if (text == "test")
        {
            cout << "Wykonano.";
        }
    }

    return 0;
}

Tylko, że gdy wpiszę np. "test test" to kod wykona się dwa razy. Czemu tak jest?

2 odpowiedzi

0 głosów
odpowiedź 20 kwietnia 2019 przez Kacper Sas Dyskutant (8,460 p.)
wybrane 20 kwietnia 2019 przez Rafep
 
Najlepsza

Pętlę nieskończone:

while(true) {}
for(;;) {}
while(1) {}

Itp.. O wiele prościej.

std::cin pobiera dane z bufora, aż do napotkania białego znaku. Czyli dla "test test" pobierze "test", druga część nadal w nim pozostanie. Pętla wykonując się kolejny raz z nieopróżnionym buforem pobierze kolejną część automatycznie. Dlatego wykonuje się dwa razy.

komentarz 20 kwietnia 2019 przez Rafep Nowicjusz (170 p.)
Nie za bardzo to rozumiem :(

Czyli jak zrobić, aby warunek spełniał się tylko, gdy wpiszemy "test", a w przypadku "test test" nie?
komentarz 20 kwietnia 2019 przez Kacper Sas Dyskutant (8,460 p.)

Warto poczytać o funkcji getline.

Użyć w tym programie można ją tak:

getline(cin, text);

 

komentarz 20 kwietnia 2019 przez Rafep Nowicjusz (170 p.)
Poczytałem trochę o getline i używając tej funkcji działa bardzo dobrze!
0 głosów
odpowiedź 20 kwietnia 2019 przez Rzepek Bywalec (2,050 p.)

w pętli for w c++ najpierw deklarujesz zmienna, później ustalasz warunek skończenia pętli i na końcu zwiększenie lub zmniejszenie zmiennej. Później oczywiście instrukcje powtarzane aż do zakończenia pętli.

domyślam że chodziło ci o:

for(int i = 0; i <= 1; i++)
{
     // cos
}

nie możesz wpisać i = 1 bo wtedy przypiszesz zmiennej "i" liczbę 1. 

komentarz 20 kwietnia 2019 przez Rafep Nowicjusz (170 p.)
Nie o to mi chodziło. Chciałem, aby ta pętla była nieskończona. Tak, aby po wpisaniu tekstu do konsoli i wykonaniu kodu można było to zrobić jeszcze raz.
komentarz 20 kwietnia 2019 przez Rzepek Bywalec (2,050 p.)

wtedy robisz tak

for(;;)
{

}

i masz nieskończoną

komentarz 21 kwietnia 2019 przez Hiskiel Pasjonat (22,850 p.)

@Rafep, no i masz pętlę nieskończoną.

W C++ inty są konwertowane do bool i tak każda liczba różna od 0 jest true, a 0 false. 

Każde wyrażenie zwraca też swój wynik, czyli wyrażenie "i = 1" zwróci 1, czyli true.

for(1;2;3){...}

W C++ w części drugiej ma być* warunek, który będzie decydować o tym, czy pętla leci dalej, czy nie. Zazwyczaj jest tam warunek sprawdzający iterator, ale w praktyce może tam być dowolna wartość bool (zazwyczaj wynikająca z wyrażenia logicznego), czyli również liczba.

Pętla będzie nieskończona.

Podobne pytania

–1 głos
1 odpowiedź 66 wizyt
pytanie zadane 3 maja 2016 w C# przez Mikołaj Kurcin Początkujący (440 p.)
0 głosów
2 odpowiedzi 1,513 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez Niebieski_Zerg Użytkownik (610 p.)
+2 głosów
1 odpowiedź 8,830 wizyt
pytanie zadane 16 stycznia 2016 w C i C++ przez xCodezaur Bywalec (2,850 p.)

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...