"Андрей Богатырев. Хрестоматия по программированию на Си в Unix" - читать интересную книгу автора


/* Печать n символов c */
printn(c, n){
while( --n >= 0 )
putchar(c);
}

int lines = 10; /* число строк треугольника */
void main(argc, argv) char *argv[];
{
register int nline; /* номер строки */
register int naster; /* количество звездочек в строке */
register int i;

if( argc > 1 )
lines = atoi( argv[1] );

for( nline=0; nline < lines ; nline++ ){
naster = 1 + 2 * nline;

/* лидирующие пробелы */
printn(' ', lines-1 - nline);

/* звездочки */
printn('*', naster);

/* перевод строки */
putchar( '\n' );
}
exit(0); /* завершение программы */
}

1.12. В чем состоит ошибка?

main(){ /* печать фразы 10 раз */
int i;
while(i < 10){
printf("%d-ый раз\n", i+1);
i++;
}
}

Ответ: автоматическая переменная i не была проинициализирована и содержит не 0, а
какое-то произвольное значение. Цикл может выполниться не 10, а любое число раз (в
том числе и 0 по случайности). Не забывайте инициализировать переменные, возьмите
описание с инициализацией за правило!

int i = 0;

Если бы переменная i была статической, она бы имела начальное значение 0.