3

我想知道这个程序是如何执行的并且不会抛出任何错误。

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

循环继续打印 A 永远。for循环的格式是

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

我的问题是 printf("\n %c", 65) 如何增加值?

4

6 回答 6

15

结果;之后的尾随不会在 内部递增,从而导致无限循环。for()ifor

这个:

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()andi不需要存在于循环体之外:

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));

但是,这比之前的建议不太清楚。

于 2013-07-29T13:20:07.780 回答
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 

即( i = 1 ; i <= 5 ; printf ( "\n%c", 65),i++ ); 这对你有用。

于 2013-07-29T13:27:35.097 回答
0

因为,如上所述,i++ 是不可达的,因为“;” 在 for 语句之后等于带有空白正文的 for。

您可以按如下方式编写此循环:

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

为了获得相同的效果并且无需编写显式块。

于 2013-07-29T13:33:21.767 回答
0

for ( i = 1 ; i <= 5 ; printf ( "\n%c", 65 ) ) ;本身就是一个语句i,在这个语句中没有递增,所以是无限循环。

这称为空循环:它类似于空 for 循环。

没有无限循环

for ( i = 1 ; i <= 5 ; printf ( "\n%c", 65 ) ){
   i++;
} 
于 2013-07-29T13:21:48.637 回答
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---导致无限循环。

于 2013-07-29T13:22:07.663 回答
0

写吧

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

你可以走了

于 2013-07-29T13:23:10.517 回答