当C中的第2次执行功能如何给printf下一行?

问题描述 投票:0回答:2

解决问题。但我的输出不与预期输出匹配。

输入:

2
16
10

预期输出:

16 11 6 1 -4 1 6 11 16
10 5 0 5 10

实际结果:

16 11 6 1 -4 1 6 11 16 10 5 0 5 10

我几乎尝试了所有的转义序列,即"\n" "\t"等。

#include <stdio.h>
#include <stdbool.h>

void printPattern(int n, int m, bool flag) {
    printf("%d ", m);

    if (flag == false && n == m)
        return;

    if (flag) {
        if (m - 5 > 0)
            printPattern(n, m - 5, true);
        else
            printPattern(n, m - 5, false);
    } else 
        printPattern(n, m + 5, false);        

    //return 0;
}

int main() {
    //int n = 16;

    int t, n;
    scanf("%d", &t);

    while (t-- > 0) {
        scanf("%d", &n);
        printPattern(n, n, true);
    }
    return 0;
}

输入:

2
16
10

预期输出:

16 11 6 1 -4 1 6 11 16
10 5 0 5 10

实际结果:

16 11 6 1 -4 1 6 11 16 10 5 0 5 10
c
2个回答
3
投票

你只需要在你的循环调用printPattern后打印一个换行符。

while(t-->0){
    scanf("%d", &n);
    printPattern(n,n,true);
    printf("\n");
}

我不会把换行打印的递归printPattern功能本身。你想打印每个你从输入读取次数和这个解决方案最能体现你的意图一行。

你也可以做putchar('\n')代替printf


0
投票

添加printf("\n")你叫printPattern()后第二次:

void printPattern(int n,int m, bool flag)
{
    printf("%d ", m);
    if(flag == false && n==m)
        return;
    if(flag)
        if(m-5>0)
            printPattern(n,m-5, true);
        else
        {
            printPattern(n,m-5,false);
            printf("\r\n"); /* Sometimes the carriage return is required in Windows
                               operating systems to simulate line break... */
        }
    else 
      printPattern(n,m+5,false);        
}
© www.soinside.com 2019 - 2024. All rights reserved.