Zamiana pętli na for

0
do
{
    Console.WriteLine("Podaj a");
    a = Convert.ToInt32(Console.ReadLine());
    b = a * a;
    Console.WriteLine(b);           
}
while (a != 0);
Console.ReadLine();

na ify się da, na while się da, a czy na fora, da się zamienić pętle? a jeśli tak to jak? albo jeszcze jakieś inne możliwe pętle?

1
for (;a!=0;)
0

Niestety ale to nie jest odpowiednik. Jaką wartość ma a na początku? W wielu przypadkach zadziała, a w niektórych nawet nie wejdzie do pętli.

0

do... while często nie da się zamienić na for i tak jest również w tym wypadku. Domyślnie taki int jest zerem, a skoro warunkiem jest a != 0 to taka pętla nawet się nie wykona, ponieważ for najpierw sprawdza warunek. W przypadku do...while ma się pewność, że wykona się co najmniej raz więc można np. zmusić użytkownika żeby wpisał coś do tego inta, co nie będzie zerem.

Jaką wartość ma a na początku?

Jeżeli nie ustawimy inaczej to będzie to zero. No chyba, że czymś zainicjalizujemy np. MinValue. Wtedy warunek zostanie spełniony i pętla for się wykona tylko takie podejście jest brzydkie. Od biedy można coś takiego zrobić:

int a = int.MinValue;
for (; a != 0; int.TryParse(Console.ReadLine(), out a))
{
    //  Operacje
}

Tylko czy to jest ładne? Tutaj naprawdę do...while najbardziej się nadaje.

Convert.ToInt32

To również jest nieprawidłowe podejście. Wpisanie przez użytkownika do formatki wartości innej niż liczba nie jest sytuacją wyjątkową, a ta metoda wywali wyjątek jeżeli user się pomyli. Lepiej skorzystać z int.TryParse i była o tym mowa już chyba pierdyliard razy. :-) Patrz sekcja 'Uwagi': https://msdn.microsoft.com/pl-pl/library/sf1aw27b(v=vs.110).aspx

0
for(a = 1; a != 0;)
{
    Console.WriteLine("Podaj a");
    a = Convert.ToInt32(Console.ReadLine());
    b = a * a;
    Console.WriteLine(b);           
}
Console.ReadLine();

Tylko po co???

2

Zawsze się da zamienić while na for i odwrotnie.

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