2013-07-29 2 views
3

Мне интересно, как эта программа выполняется вообще и не вызывает никаких ошибок.Формат цикла в C

void main() 
{ 
    clrscr(); 
    int i ; 
    for (i = 1 ; i <= 5 ; printf ("\n%c", 65)) ; 
     i++ ; 
    getch(); 
} 

Цикл продолжает печать A навсегда. Формат для петли

for(initialize value; test counter; increment value) 
{ 
    do this; 
    and this; 
    and this; 
} 

Мой вопрос, как может Е ("\ N% C", 65) увеличения значения?

+3

'i ++' недостижима. – Maroun

+0

'printf' on success возвращает общее количество написанных символов. Его величина не увеличилась 'i' – P0W

+0

, который дал вам этот хитрый код? –

ответ

15

Задний ; после того, как for() результатов в i не увеличивается на единицу внутри for, вызывая бесконечный цикл.

Это:

for (i = 1 ; i <= 5 ; printf ("\n%c", 65)) ; 
    i++ ; 

эквивалентно: не

for (i = 1 ; i <= 5 ; printf ("\n%c", 65)) {} /* Empty loop body. */ 
i++ ; 

i++ не достигается. Чтобы исправить, удалите завершающий ;. Было бы понятнее использовать i++ как выражение итерации в цикле for и не printf() и i не должны существовать вне тела цикла:

for (int i = 1; i <= 5; i++) 
{ 
    printf ("\n%c", 65); 
} 

Мой вопрос, как может printf("\n %c", 65) прирастить значение?

printf() возвращает количество записанных символов, так можно было бы использовать его для увеличения i, если вы хотите, но это было бы необходимым, чтобы изменить условие завершения для учета \n характера:

for (int i = 1; i <= 10; i+= printf("\n%c", 65)); 

Однако это менее очевидно, чем предыдущее предложение.

0

for (i = 1 ; i <= 5 ; printf ("\n%c", 65)) ; есть само по себе заявление i не увеличивается в этом утверждении и, следовательно, бесконечный цикл.

Это называется пустой цикл: он похож на пустой цикл.

Без бесконечного цикла

for (i = 1 ; i <= 5 ; printf ("\n%c", 65)){ 
    i++; 
} 
0

Вы самостоятельно, учитывая формат for loop является

for(initialize value; test counter; increment value) 
{ 
    do this; 
    and this; 
    and this; 
} 

но вы использовали

for(initialize value; test counter; increment value); 
{ 
    do this; 
    and this; 
    and this; 
} 

Размещение ; после for() приведет выполнение нуль заявление. И это не позволит программе увеличивать i --- в результате получается бесконечный цикл.

0

просто написать

void main() 
{ 
    clrscr(); 
    int i ; 
    for (i = 1 ; i <= 5 ; printf ("\n%c", 65)) 
     i++ ; 
    getch(); 
} 

и вы хорошо идти

0
for(initialize value; condition; increment value/decrement value) 
{ 
    do this; 
    and this; 
    and this; 
} 
you can write many initializations, many increments/decrements but we have to write only one condition 

т (я = 1, я < = 5; Е ("\ п% с", 65), я ++); это будет работать для вас.

0

Поскольку, как сказано выше, i ++ недоступен, поскольку ";" после того, как оператор for равен значению a для пустого тела.

Вы могли бы написать эту петлю следующим образом:

for (i = 1 ; i <= 5 ; printf ("\n%c", 65) , i++); 

для получения того же эффекта и без написания явного блока.

Смежные вопросы