Funkcja while

0

Mam pytanie:
Według wikipedii pętla while "wykonuje instrukcję tak długo, dopóki jej warunek jest spełniony (ma wartość różną od zera). Instrukcja sprawdza warunek przed wykonaniem ciała pętli. Pętla while może wykonywać się nieskończoną ilość razy, gdy wyrażenie nigdy nie przyjmie wartości 0, może także nie wykonać się nigdy, gdy wartość przed pierwszym przebiegiem będzie zerowa."

Mam zadanie:
int n=10, m=20;
while(n--);
m=n

Po napisaniu czegoś takiego wyświetla że m=-1, jednak nie wiem dlaczego. Czy mógłby mi to ktoś wyjaśnić?
Z góry dzięki

0

while(n--); wykonuje się dopóki n nie będzie miało wartości 0. Ponieważ operator postdekrementacji najpierw zwraca wartość a potem ją zmniejsza na końcu zostaje -1. Jeżeli instrukcja m=n miała się wykonywać w pętli powinieneś był ją objąć klamrami.

0
Endrju napisał(a)

Jeżeli instrukcja m=n miała się wykonywać w pętli powinieneś był ją objąć klamrami.

Albo nie stawiać średnika za nawiasem od 'while'.

0

To jest zadanie z kolokwium i było podane w takiej właśnie formie.
Wracając: "wykonuje się dopóki n nie będzie miało wartości 0" - Skoro nie może przyjąć wartości 0 to skąd -1? Żeby uzyskać -1 musiałoby wcześniej właśnie 0 przyjąć.
Chyba że "do zera włącznie"?

0

W momencie, kiedy n jest równe 1 instrukcja n-- zwraca 1 i zmniejsza wartość n do 0. W następnym kroku (ostatnim) n-- zwraca 0 (koniec while) i zmniejsza wartość n do -1.

0

To mam jeszcze jedno pytanie/zadanie:
funkcja Ala ma postać:

int Ala(char *p){
char *q=p;
while(*q)q++;
return q-p;}
podaj 'm' po instrukcji m=Ala("Ala");

a)6
b)3
c)0
d)1

Czy ktoś mógłby jeszcze to zadanie wyjaśnić?

1

Lepszą nazwą dla tej funkcji Ala byłoby strlen.

1 użytkowników online, w tym zalogowanych: 0, gości: 1