Poprawiłem trochę twój kod, aby wyglądał estetyczniej. Dzięki temu będzie Ci (i nam) dużo łatwiej go czytać oraz znajdywać ewentualne błędy.
# include <stdio.h>
int main()
{
int a, b;
printf("Podaj dwie liczby calkowite wieksze od 0:\n");
printf("a = ");
scanf("%i", &a);
printf("b = ");
scanf("%i", &b);
if (a <= 0 | b <= 0)
{
printf("Podano nieprawidlowe wartosci.");
}
else
{
printf("NWD(%i, %i) = ", a, b);
}
for (; a != b;)
{
if (a > b)
{
a = a - b;
}
else
{
b = b - a;
}
}
printf("%i\n", a);
return 0;
}
Zamiana pętli while na pętlę for nie kosztowała zbyt dużo wysiłku. Po prostu wystarczy wiedzieć, jak pętla for działa. Aby to Ci wytłumaczyć, posłużę się przykładem.
for (int i = 0; i < 5; ++i) {
//Jakiś kod...
}
W nawiasie mamy trzy części. Użycie każdej z nich jest opcjonalne! Pierwsza z nich to kod, który wykonuje się przed wykonaniem się samej pętli. Wykonuje się on tylko raz. Druga część to warunek, który jest sprawdzany za każdym razem przed wykonaniem następnego obiegu pętli (w tym pierwszego). Trzecia część to instrukcja, która wykonuje się po każdym obiegu pętli (a przed sprawdzeniem warunku). A więc kod ten można zapisać równie dobrze tak:
int i = 0;
while (i < 5) {
// Jakiś kod
++i;
}
A jako, że możemy pominąć wymienione przeze mnie części, wystarczyło zamienić linię
while (a != b)
na
for (; a!=b;)
I tyle.