Чтобы улучшить читабельность программы, рекомендуется в качестве оператора писать всегда блок и указывать ``while`` в одной строке с ``}``:
```run-c
#include <stdio.h>
#include <math.h>
int main()
{ double a;
do {
printf("Введите число от -1 до 1:\n");
scanf("%lf",&a);
} while(a<-1 || a>1);
printf("Угол равен %lf\n",acos(a));
}
<<
5
0.5
```
\
Более сложный пример с вложенными циклами:
![float:right;width:200px|](52218.png)
```run-c
#include <stdio.h>
int main()
// Разложение числа N на простые множители
{ int n, i=2;
scanf("%d",&n);
while(i*i<=n) {
while(n%i==0) {
printf("%d ",i);
n/=i;
}
++i;
}
if(n>1) printf("%d",n);
printf("\n");
}
<<
250
```
Перед первым оператором цикла выполняется инициализация вспомогательной переменной `i`. В конце цикла переменная `i` увеличивается на 1. Если пропустить одно из этих действий, программа не будет работать (проверьте). Даже если в программе не сделано ни одной ошибки, сложно быстро найти, какое начальное значение задано для `i`, и как она изменяется.
![float:right;width:220px|](52216.png)
Чтобы собрать все действия над переменной цикла в одном месте, используется оператор ``for``.
Если `"инициализация"` -- это оператор определения переменной (или переменных), а не просто присваивание, то видимость и время жизни переменной будет ограничена этим оператором ``for``.
Любой из элементов ``for`` может быть пропущен. Например, при пропуске `"условие"` цикл будет выполняться бесконечно:
```
// бесконечный цикл: вывести представление 1/3 как 0.3333....
printf("1/3 = 0.");
for(;;)
printf("3");
```
Перепишем программу с вложенными циклами через ``for``:
```run-c
#include <stdio.h>
int main()
// Разложение числа N на простые множители
{ int n;
scanf("%d",&n);
for(int i=2; i*i<=n; ++i) {
for(; n%i==0; n/=i)
printf("%d ",i);
}
if(n>1) printf("%d",n);
printf("\n");
}
<<
250
```