[C] Proste zadanie pętla - jak dobrze utworzyć ? / Krzeczkowski 1.4.3

0

1.4.3 Napisz program wczytujący ze standardowego wejścia trzy dodatnie liczby całkowite n, m i k, i wypisujący w kolejnych wierszach wszystkie wielokrotności n większe od m i mniejsze od k. Pomoże mi ktoś zrozumieć i wyjaśnić gdzie jest błąd ?

// 1.4.3
{
    int n, m ,k, i;
    scanf("%d%d%d", &n, &m, &k);
    for(i=m; i<(k-m); i++)
    {
    if(n*i>m || n*i<k)
    {
        printf("\n %d", n*i);
    }
    }
/*
    for(int i=1 ; i<k;i++)
    {
        if(n>m || n<k)
        printf("\n%d" , n*i);
*/


    return 0;
}

1

Pomoże mi ktoś zrozumieć i wyjaśnić gdzie jest błąd ?

Wypadałoby opisać co ma się dziać i co się dzieje. https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/

for(i=m; i<(k-m); i++)

Niepotrzebnie odejmujesz m w warunku. Dla m = 40 i k = 60, iterujesz od i równego 40, tak długo jak i < 60 - 40, czyli nigdy.

Dodatkowo

if(n>m || n<k)

masz błędny warunek, chcesz aby oba były spełnione, a nie co najmniej jeden z nich.

0

Dzięki za wyłapanie błędu. Jeszcze chciałbym wiedzieć w którym miejscu poprawić żeby wartość była mniejsza od k
Dla przykładu pobieram n=2 m=8 k=32 . A więc pierwszą wyświetlaną wartością powinno być 10 a największą 30. U mnie zaś wartość największa to 62 a najmniejsza 16. i dopiero wtedy ta "wielokrotność się zatrzymuje". Które miejsce jeszcze powinienem poprawić?

0

Powinieneś sprawdzać, czy i * n < k

0

Dobra wyłapałem błąd

if(n*i>m || n*i<k) \\ zamiast pipe pownien być && 
    {
        printf("\n %d", n*i);
    }

Dopiero wtedy zadziało.
Dzięki za pomoc
Temat do zamknięcia

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