Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Petla do... while warunek konczacy

Ostatnio zmodyfikowano 2015-08-23 13:32
Autor Wiadomość
Demoncros
Temat założony przez niniejszego użytkownika
Petla do... while warunek konczacy
» 2015-08-23 12:15:42
Czemu warunkiem konczacym jest
while( liczba != 123 );
a nie
while( liczba = 123 );
w przykladowym kodzie
C/C++
#include <iostream>
int main()
{
    int liczba;
    do
    {
        std::cout << "Podaj liczbe 123 aby zakonczyc petle" << std::endl;
        std::cin >> liczba;
        std::cout << "Podales liczbe " << liczba << std::endl;
    } while( liczba != 123 );
   
    std::cout << "Koniec" << std::endl;
    return 0;
}

pytam dlatego bo w moim rozumowaniu != oznacza rozne od, wiec czemu program po podaniu 123 zakancza pentle?
P-136774
JMII89
» 2015-08-23 12:21:50
Bo warunkiem pętli jest powtarzanie pętli DOPÓKI liczba nie jest równa 123 . Więc jeśli ktoś wpiszę 123 to warunek jest fałszywy dlatego program wychodzi z pętli.Czy to nie jest oczywiste ?
http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-do-while/18
P-136775
pekfos
» 2015-08-23 12:58:58
while( liczba = 123 );
Ten warunek jest zawsze prawdziwy. To przypisanie, a nie porównanie.
P-136782
mateczek
Tak to działa
» 2015-08-23 13:32:12
C/C++
while( 1 ) {
    // to są pętle nieskończone 1 = true;
    //powtarzaj dopuki prawda
    if( 1 ) break; // tak można opuścić pętlę
   
    if( liczba == 123 ) break;
   
}
while( true ) {
    //tak samo jak wyżej pętla nieskończona
    //poniżej kod pozwalający opuścić pętlę nieskończoną
    if( liczba == 123 ) break;
   
}

while( liczba = 123 );
/*jeśli już to while (liczba==123) co należy tłumaczyć kręć pętlą dopóki liczba jest równa 123.

W warunku chodzi przecież o to by kręcić pętlą dopóki liczba będzie różna 123. Czyli kręć póki warunek (liczba!=123) będzie prawdą!!!

W języku c++ wszystkie liczby większe od zera to "true" więc wpisanie do zmiennej "liczba" wartości 123 daje "zawsze prawda" więc pętla robi się nieskończona. patrz przykład 1

*/

Na przypisania w stylu

if( x = func() )

Trzeba uważać. Bo kompilator najpierw ustawia wartość x na wartość zwróconą przez funkcję. I jeśli ta wartość jest różna od 0 to traktuje ją jako "true" a jeśli wartość zwróconą przez funkcję jest 0 wówczas kompilator traktuje jak "false". (Często więc znak równa "=" w zapisie zamiast operatora "==" jest błędem)
P-136784
« 1 »
  Strona 1 z 1