Как напечатать f к следующей строке, когда функция выполняется во второй раз в C? - PullRequest
0 голосов
/ 02 февраля 2019

Решение проблемы.Но мой вывод не совпадает с ожидаемым результатом.

Ввод:

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

Я почти перепробовал все escape-последовательности,то есть "\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

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Добавить 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);        
}
0 голосов
/ 02 февраля 2019

Вам просто нужно напечатать перевод строки после вызова printPattern в цикле.

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

Я бы не помещал печать перевода строки в саму рекурсивную функцию printPattern.Вы хотите напечатать одну строку для каждого числа, которое вы читаете из ввода, и это решение лучше всего отражает ваши намерения.

Вы также можете сделать putchar('\n') вместо printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...