首页 > 解决方案 > 是否可以创建一个用户输入数字金字塔,其中金字塔仅显示 0 - 9?

问题描述

我尝试编辑循环的计数器,以便最后一行printf是非负的,但我不太确定要编辑循环的哪一部分。

#include <stdio.h>

void printPatternHere(int height);

int main() {
    int height;
    printf("Enter the number of rows: ");
    scanf("%d", &height);
    printf("printPattern: \n");
    printPatternHere(height);
    return 0;
}

void printPatternHere(int height) {
    int n, c, row, t = 1;
    int counter = 0;

    for (row = 1; row <= height; row++) {

        for (c = 1; c <= height - row; c++)
            t = row; // start each line with row number

        for (c = 1; c <= row; c++) {
            counter++;

            if (counter > 9) {
                t = t % 10;
            }

            printf("%d ", t);
            t++;
        }

        for (c = 1 ; c < row; c++) {
            t--; //reset row number
        }

        printf("\n");
    }
}

如果 userinput 是 14,它的输出应该是这样的:

1 
2 3 
3 4 5 
4 5 6 7 
5 6 7 8 9 
6 7 8 9 0 1 
7 8 9 0 1 2 3 
8 9 0 1 2 3 4 5 
9 0 1 2 3 4 5 6 7 
0 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 0 1 
2 3 4 5 6 7 8 9 0 1 2 3 
3 4 5 6 7 8 9 0 1 2 3 4 5 
4 5 6 7 8 9 0 1 2 3 4 5 6 7

标签: cloops

解决方案


你的代码太复杂了。金字塔的输出可以做得更简单。

例如这个循环

    for (c = 1; c <= height - row; c++)
        t = row; // start each line with row number

没有意义。

这个给你。

#include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        const unsigned int Base = 10;
        
        printf( "Enter a non-negative number (0 - exit): " );
        
        unsigned int n;
        
        if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
        
        putchar( '\n' );
        
        for ( unsigned int i = 0; i < n; i++ )
        {
            for ( unsigned int j = 0; j < i + 1; j++ )
            {
                printf( "%u ", ( j + i + 1 ) % Base );
            }
            
            putchar( '\n' );
        }
        
        putchar( '\n' );
    }

    return 0;
}

程序输出可能看起来像

Enter a non-negative number (0 - exit): 14

1 
2 3 
3 4 5 
4 5 6 7 
5 6 7 8 9 
6 7 8 9 0 1 
7 8 9 0 1 2 3 
8 9 0 1 2 3 4 5 
9 0 1 2 3 4 5 6 7 
0 1 2 3 4 5 6 7 8 9 
1 2 3 4 5 6 7 8 9 0 1 
2 3 4 5 6 7 8 9 0 1 2 3 
3 4 5 6 7 8 9 0 1 2 3 4 5 
4 5 6 7 8 9 0 1 2 3 4 5 6 7 

Enter a non-negative number (0 - exit): 0

如果您想编写一个单独的函数来输出模式,那么程序可以如下所示。

#include <stdio.h>

FILE * display_pyramid( unsigned int n, FILE *fp )
{
    const unsigned int Base = 10;
        
    for ( unsigned int i = 0; i < n; i++ )
    {
        for ( unsigned int j = 0; j < i + 1; j++ )
        {
            fprintf( fp, "%u ", ( j + i + 1 ) % Base );
        }
            
        fputc( '\n', fp );
    }
    
    return fp;
}

int main(void) 
{
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): " );
        
        unsigned int n;
        
        if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
        
        putchar( '\n' );
        
        fputc( '\n', display_pyramid( n, stdout ) );
    }

    return 0;
}

推荐阅读