尝试从我的输出中删除每个数字,例如直角三角形

Trying to remove each digit from my output, like a right triangle

我正在尝试让我的程序删除每一行的最后一位数字。

我卡住了,不明白为什么 number = number % 10 在第二个 for 循环中不起作用?

#include <stdio.h>
#include <math.h>
    
int main(){
    long long number;
    
    printf("Enter a number\n");
    printf("Enter your number = ");
    scanf("%d", &number);
    
    for(int j=1; j<= (log10(number)+1); j++){
        for(int i=1; i<= (log10(number)+1); i++){
            printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
        }
        printf("\n");
    }
    
    return 0;
}

我的输出:

Enter a number
Enter your number = 12345
5   4   3   2   1
5   4   3   2   1
5   4   3   2   1
5   4   3   2   1
5   4   3   2   1

我要输出的内容:

Enter a number
Enter your number = 12345
5   4   3   2   1
5   4   3   2
5   4   3
5   4
5   

在第二个 for 循环中执行 number = number % 10 是个坏主意,因为它会破坏 number.

中的数据

要删除数字,您应该减少要在内循环中打印的数字。

这意味着

    for(int j=1; j<= (log10(number)+1); j++){
        for(int i=1; i<= (log10(number)+1); i++){

应该是

    for(int j=1; j<= (log10(number)+1); j++){
        for(int i=1; i<= (log10(number)+1) - (j-1); i++){

使得内循环中的迭代按照j.

减少

另请注意

long long number;
scanf("%d", &number);

调用 未定义的行为 因为 scanf() 中的 %d 需要 int* 但传递的是 long long* 而不是那个。

要通过 scanf() 阅读 long long,您应该使用 %lld

long long number;
scanf("%lld", &number);

附加其他答案我建议作为使用递归函数(不调用任何数学函数)输出给定数字的替代解决方案。

这是一个演示程序。

#include <stdio.h>

FILE * output( unsigned long long n, FILE *fp )
{
    const unsigned long long Base = 10;
    
    if ( n / Base != 0 )
    {
        output( n / Base, fp );
        fprintf( fp, "   " );
    }
    
    fprintf( fp, "%llu", n % Base );

    return fp;
}

int main(void) 
{
    const unsigned long long Base = 10;
    
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): " );
        
        unsigned long long n;
        
        if ( !( scanf( "%llu", &n ) == 1 ) || ( n == 0 ) ) break;
        
        putchar( '\n' );
        
        do
        {
            fputc( '\n', output( n, stdout ) );
        } while ( n /= Base );
        
        putchar( '\n' );
    }
    
    return 0;
}

程序输出可能看起来像

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

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

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