[C] Przerobienie programu z pętli do/while na while


(luki1992) #1

Witam mam problem taki jak w temacie. Mam we wtorek kolosa z tego i nie do końca wiem jak zamienić ten program z pętli do/while na samo while. Oczywiście nikt nam tego nie tłumaczy, więc dlatego trudno mi to samemu załapać. Z góry dzięki za pomoc :slight_smile:


(Sawyer47) #2

http://en.wikipedia.org/wiki/Do_while_l ... constructs


(system) #3

Pętle o, które prosisz różnią się sprawdzaniem wyników, czyli :

while(liczba!=1){

    scnaf("%d",&liczba);

    printf(%d,liczba);

}

do{

    scnaf("%d",&liczba);

    printf(%d,liczba);

}while(liczba!=1);

Należy tutaj tylko i wyłącznie przypatrzeć na budowie tych pętli i po prostu zastosować to u Ciebie.

Pozdrawiam


(Michal B1990) #4

W tym miejscu komentarz nie pasuje do rzeczywistego działania kodu:

break;/* przejdz do warunku petli */

Instrukcja break nie powoduje przejścia do warunku pętli. Po napotkaniu break wykonywanie pętli jest przerywane niezależnie od tego czy warunek jest nadal spełniony czy też nie. Aby przejść do warunku pętli należy zastosować instrukcję continue.

W tym przykładzie program nie działa tak samo. Gdy liczba jest równa 1 kod zawarty w pętli while nie wykona się ani razu, a w przypadku do-while wykona się jednokrotnie. Po za tym przed pętlą while trzeba by wcześniej przypisać jakąś wartość zmiennej liczba. Twój kod z użyciem pętli while może wyglądać następująco:

#include 

#include /* funkcja system() wymaga stdlib.h */

#include /* deklaracja funkcji time() */


int main()

{

   srand(time(NULL));

   short propozycja, wylosowana=rand()%100;


   printf("Wpisz liczbe: ");

   scanf("%hd", &propozycja);

   while (propozycja != wylosowana)

   {

      if (propozycja < 0 || propozycja > 99)

      {

         printf("Liczba poza zakresem 0-99.\n");

         printf("Wpisz liczbe: ");

         scanf("%hd", &propozycja);

         continue;/* przechodzi do warunku*/

      }

      if (propozycja > wylosowana)

      {

         printf("Zbyt duza liczba\n");

         printf("Wpisz liczbe: ");

         scanf("%hd", &propozycja);

      }

      else if (propozycja < wylosowana)

      {

         printf("Zbyt mala liczba\n");

         printf("Wpisz liczbe: ");

         scanf("%hd", &propozycja);

      }

   }

   printf("Zgadza sie!\n");

   system("pause");

}

(system) #5

Napiszę większymi liczbami, ponieważ widzę, że nie zrozumiałeś mojego zamierzenia umieszczenia tych skrawków kodu.

MIAŁO TO SŁUŻYĆ TYLKO I WYŁĄCZNIE PRZYKŁADOWI

Naprawdę nie musisz mi tłumaczyć, jak to działa :slight_smile: owszem koniecznie trzeba zadeklarować wartość zmiennej, jednak ja uważam, że nie trzeba koniecznie wykładać wszystkiego na tacy.