2014-05-23 53 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將打印空白行