C练习 - 循环 - 意外输出:空行

时间:2014-05-23 12:56:53

标签: c loops line

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

#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?)
***
======
=====
====
===
==

2 个答案:

答案 0 :(得分:1)

这会在数字后面添加一个新行:

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

这会在星号之前添加一个新行:

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

如果我理解你,你只想写:

printf("***\n");

答案 1 :(得分:0)

这两行:

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

在循环的最后一次迭代中减少到

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

\n\n会打印一个空行