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

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

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...