• 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.

VPS Starter Arubacloud
0 głosów
230 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,830 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ź 223 wizyt
–1 głos
1 odpowiedź 88 wizyt
pytanie zadane 3 maja 2016 w C# przez Mikołaj Kurcin Początkujący (440 p.)
0 głosów
2 odpowiedzi 2,122 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez Niebieski_Zerg Użytkownik (610 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...