Цикл – управляюча конструкція, призначена для багаторазового виконання однієї чи декількох інструкцій. Одне циклічне повторення має назву – ітерація.
Цикл while
Цикл з передумовою while – перевіряє умову на початку виконання, та має наступний синтаксис:
while(умовний_вираз)
{
// інструкції
}
Виконується до тих пір, поки умова – істина(рівна true).
Приклад: вивід в консоль цифр від 1 до 9:
var n = 1;
while (n < 10)
{
Console.WriteLine(n);
n += 1;
}
Цикл do while
Цикл з післяумовою do while – здійснює перевірку умови після виконання однієї ітерації, тобто тіло циклу, не залежно від умов, виконується хоча б один раз.
Приклад: сума чисел від 1 до 10:
int k = 1;
int s = 0;
do
{
s += k;
++k;
}
while (k <= 10);
Console.WriteLine("Sum = {0}", s);
Цикл for
Цикл з лічильником for – це цикл в якому лічильник змінює значення від початкового до кінцевого з певним кроком, і для кожного значення лічильника виконується одна ітерація.
Має наступний синтаксис:
for(ініціалізатор; умова; ітератор)
{
// інструкції;
}
Розділи ініціалізатор, умова та ітератор є не обов’язковими. В ітераторі може міститися декілька інструкцій, розділених комою – “,”.
Розглянемо приклад знаходження добутку чисел від 1 до 10:
int p = 1;
for (int i = 1; i <= 10; i++)
{
p *= i;
}
Цикл працює наступним чином:
- ініціалізується змінна – int i = 1;
- перевіряється умова i <= 10:
- якщо значення true переходимо до наступного кроку;
- якщо false - виходимо з циклу;
- виконується інструкція – p *= i;
- змінюється лічильник – i++;
- перехід на 2-й крок.
Цикл foreach
Цикл foreach, або цикл перегляду – застосовується до колекцій(масивів, списків), перебирає всі елементи колекції, для кожної ітерації бере один елемент.
var array = new[] { 1, 2, 3, 4, 5 }; //масив цілих чисел
//в кожній ітерації змінній item присвоюється наступне значення з масиву
foreach (var item in array)
{
Console.WriteLine(item);
}
Оператор goto
За допомогою оператора безумовного переходу goto можна реалізувати циклічне повторення:
byte x = 9;
label:
Console.WriteLine(x--);
if (x > 0)
{
goto label; //перейти на label
}
Циклічне повторення не є циклом в прямому розумінні цього слова.
Використання goto дуже ускладнює читання коду програми. В деяких мовах програмування цей оператор заборонений, а в інших його використання вважається поганим прикладом. В C#, він присутній, але на практиці майже не використовується. Тут наводиться в якості огляду можливостей платформи .Net.
Оператори break та continue
Іноді необхідно вийти з циклу, не дочекавшись його завершення, для цього використовується оператор переривання циклу - break.
int x = 0;
while (x < 100)
{
// при значенні x більше 7 відбудеться дострокове переривання циклу
if (x > 7)
break;
Console.WriteLine(x);
x++;
}
Якщо потрібно пропустити одну чи декілька інструкцій, та одразу перейти до наступної ітерації, використовується оператор – continue.
int b = 0;
for (int i = 1; i < 10; i++)
{
b += 10;
//при значенні i = 4 в консоль нічого не виводиться
if (i == 4)
continue;
Console.WriteLine("{0}. {1}", i, b);
}
Безкінечні цикли
Безумовні або безкінечні цикли, це цикли які повторюються безкінечну кількість разів. Часто використовуються на практиці, коли потрібно виконати невідому на початку циклу кількість операцій. Для виходу з циклів використовують оператор break.
Варіанти реалізації:
while(true)
{
//тіло циклу
}
for(;;)
{
//тіло циклу
}
do
{
//тіло циклу
}
while(true);
Приклад використання безкінечного циклу для зчитування рядків тексту з клавіатури:
string text = "";
do
{
Console.Write("Введіть рядок тексту, або exit для переривання вводу: ");
var s = Console.ReadLine();
if (s == "exit")
break;
else
text += s + "\r\n";
}
while (true);
Всі з розглянутих циклів можуть містити вкладені цикли, або інші конструкції мови C#.