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

question-closed Chciałbym zrozumieć jaka jest różnica pomiędzy zapisami tych dwóch pętli.

0 głosów
128 wizyt
pytanie zadane 15 lutego 2019 w C i C++ przez matzar24 Początkujący (250 p.)
zamknięte 16 lutego 2019 przez matzar24

Witam, prosiłbym  o wytłumaczenie zapisu while(cin>>x){...}   vs   for(;;){cin>>x; ...}. Jak mam rozumieć zapis z cin'em w nawiasach okrągłych przy pętli while?

Nie rozumiem, dlaczego zapis z pętlą for nie jest przyjmowany, a zapis z pętlą while jest dobry. Jest to zadanie z pl-SPOJ o nazwie SUMA, treść zadania jest pokazana poniżej. 

-"Na wejście programu podana zostanie pewna nieokreślona, ale niewielka ilość małych liczb całkowitych (z zakresu -100..100). Poszczególne liczby zostaną rozdzielone znakiem nowej linii."

-"Na wyjściu ma się pojawić ciąg liczbowy, którego i-ta pozycja jest równa sumie i pierwszych wczytanych z wejścia liczb. Poszczególne liczby należy rozdzielić znakami nowej linii."

komentarz zamknięcia: Otrzymałem satysfakcjonującą odpowiedź.

2 odpowiedzi

+2 głosów
odpowiedź 15 lutego 2019 przez RafalS VIP (122,860 p.)
wybrane 16 lutego 2019 przez matzar24
 
Najlepsza
while(cin>>x){...}

Wyrażenie:

cin>>zmienna

zwraca strumień, czyli w tym przypadku cin. Umożliwia to takie łańcuchy:

cin>>zmienna>>zmienna2>>zmienna3;

Ten kod jest rownowazny z:

cin>>zmienna; cin>>zmienna2; cin>>zmienna3;

Dodatkowo istnieje konwersja typu istream na bool. cin jest typu istream. Wrzucając go w miejsce gdzie oczekuje się wartości logicznej zachodzi niejawna konwersja na bool. Podobnie jakbyś zrobił tak:

if(cin)

lub

while(cin)

obiekt istream daje True gdy stumień jest otwarty i nie było błędów oraz false w przeciwnym wypadku. Dzięki temu konstrukcja:

while(cin>>x){...}

wczytuje dane dopóki są jakieś na wejściu.

Drugi zapis:

for(;;){cin>>x; ...}

nie działa, bo nie ma warunka przerwania pętli. To jakby napisać:

while(true) {cin>>x;}
+1 głos
odpowiedź 15 lutego 2019 przez SimiVoid Pasjonat (18,430 p.)

Zapis z pętlą for jest pętlą nieskończoną bez warunku końcowego, zaś zapis:

while(cin>>x)
{
...
}

jest wykonywany do momentu kiedy program otrzymuje na wejściu ciąg o minimalnej długości 1

Podobne pytania

0 głosów
4 odpowiedzi 3,816 wizyt
pytanie zadane 12 marca 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 3 lutego 2019 w JavaScript przez jared Gaduła (3,620 p.)
0 głosów
1 odpowiedź 1,936 wizyt

87,892 zapytań

136,485 odpowiedzi

304,289 komentarzy

58,279 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.

...