2014-05-23 29 views
0

我想知道为什么在输出中指定的位置打印有空行。 它对我没有意义,因为这意味着即使测试条件为假,循环也会继续。 (这是在第6章 “C的Primer Plus” 的第9审查问题)C练习 - 循环 - 意外输出:空行

#include <stdio.h> 
int main(void) 
{ 
    int n, m; 

    n = 30; 
    while (++n <= 33) 
     printf("%d|",n); 

    n = 30; 
    do 
     printf("%d|",n); 
    while (++n <= 33); 

    printf("\n***\n"); 

    for (n = 1; n*n < 200; n += 4) 
     printf("%d\n", n);  // Why will this print an empty line at the end? 

    printf("\n***\n"); 

    for (n = 2, m = 6; n < m; n *= 2, m+= 2) 
     printf("%d %d\n", n, m); // and this 

    printf("\n***\n"); 

    for (n = 5; n > 0; n--) 
    { 
     for (m = 0; m <= n; m++) 
      printf("="); 
     printf("\n"); 
    } 

    return 0; 
} 

产生输出:

31|32|33|30|31|32|33| 
*** 
1 
5 
9 
13 
          (<= Why is there an empty line here?) 
*** 
2 6 
4 8 
8 10 
          (<= and here?) 
*** 
====== 
===== 
==== 
=== 
== 
+3

你只是在'printf(“\ n *** \ n”)中打印了一个额外的'\ n';'(在开头宁)。 –

+0

因为在printf(“\ n *** \ n”)中的'***'之前打印了一个空行;'? – Matt

回答

1

这个数字后加新行:

printf("%d\n", n); 

这增加了星号之前一个新行:

printf("\n***\n"); 

如果我正确理解你想要的只写:

printf("***\n"); 
0

这两条线:

printf("%d\n", n); 
printf("\n***\n"); 

减少,对你的循环的最后一次迭代,到

printf("%d\n\n***\n", n); 

\n\n将打印空白行