В C для циклов могут отсутствовать оговорки.
Если вы знаете это, а также знаю, что for
является:
for (initialization ; condition ; increase)
{
code;
}
//is actually
initialization;
while (condition)
{
increase;
code;
}
это на самом деле просто:
for(;b-c;)f[b++]=a/5;
эквивалентно
while (b-c)
{
f[b++] = a/5;
}
Второй:
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
эквивалентно:
while (d=0, g=c*2)
{
//the order in which the following are executed might be different
c-=14;
printf("%.4d",e+d/a);
e=d%a;
}
Наконец, третий:
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
эквивалентно:
b=c;
while (d+=f[b]*a, f[b]=d%--g, d/=g--, --b)
{
D*=b;
}
Однако код действительно действительно некрасиво, вам лучше начать с нуля.
EDIT:
далее
Одно из объяснений - для условия, состоящего из выражений, разделенных запятыми, только последнее отношение к петле:
while (a, b, c)
{
}
будет цикл до c
оценивается в ложь. Однако на каждой итерации выполняются a
и b
. Поэтому, если c
будет оцениваться до false
, другое выражение в выражении условия все равно выполняется, тогда как выражения в выражении увеличения не являются (что, вероятно, является целью здесь).
C очень похож на java .. почему бы вам не приложить некоторые усилия при рассмотрении некоторых принципов C? .. Если вы уже знаете Java, вам потребуется не более часа – Protostome
Кажется, что вы получаете доступ к 'b 'перед его инициализацией. –
Петли очень похожи между Java и C. Если вы знаете Java, вы подберете ее очень быстро – bernie