C 有没有更干净的方法来打印坐标系?

C 有没有更干净的方法来打印坐标系?,c,C,所以我需要打印一个坐标系,这是我所做的 #include<stdio.h> int main() { int n, x, y; do { printf("Enter the size: "); scanf("%d", &n); printf("Enter coordinates (x,y): ");

所以我需要打印一个坐标系,这是我所做的

    #include<stdio.h>
    int main() {
        int n, x, y;
        do {
            printf("Enter the size: ");
            scanf("%d", &n);
            printf("Enter coordinates (x,y): ");
            scanf("%d %d", &x, &y);
            for( int j = 0; j < n + 1; j++ ) {
                printf(" ");
            }
            printf("^\n");
            for( int i = 0; i < n; i++ ) {
                for( int j = 0; j < n + 1; j++ ) {
                    printf(" ");
                }
                printf("|\n");
            }
            printf("<");
            for( int i = 0; i < n; i++ ) {
                printf("-");
            }
            printf("+");
            for( int i = 0; i < n; i++ ) {
                printf("-");
            }
            printf(">\n");
            for( int i = 0; i < n; i++ ) {
                for( int j = 0; j < n + 1; j++ ) {
                    printf(" ");
                }
                printf("|\n");
            }
            for( int j = 0; j < n + 1; j++ ) {
                printf(" ");
            }
            printf("v\n");


        } while( n != 0 );

    }
#包括
int main(){
int n,x,y;
做{
printf(“输入大小:”);
scanf(“%d”和“&n”);
printf(“输入坐标(x,y):”;
scanf(“%d%d”,&x,&y);
对于(int j=0;j
另外,我需要在坐标上打印“”,所以如果有人能帮忙,我将不胜感激。
如果我输入5,它应该看起来像中间大小,但垂直,看起来不错,但是有一种方法使它更干净,我如何把“在”(x,y)坐标的位置“我输入< /p> 你的程序类型的作品。” 标记平面中的特定点时出现问题,因为循环是从
0
开始的,而不是从
n
-n
开始的。这个小小的调整会让你的生活更轻松。
同时考虑程序在输入无效时应该做什么

关于更简洁的方式,我不知道你的确切意思,但可以肯定的是,通过实现重复任务的函数,你可以使阅读和调试更容易

我向您展示了这个程序,它使用一个函数来打印平面的一行,但是正如您所看到的,这个函数有5个参数,并且在
main
中有重复的模式,这表明程序可能需要一些新的函数

#include <stdio.h>

void printAline( int n, int x, char c, char m, int b );

int main() {

    int i, x = -3, y = 5, n = 9;
    
    for( i = -n; i++; ) putchar( ' ' );
    puts(" ^");
    
    for(i = n; i >= -n; i--) {
        
        if( i ) {
            
            putchar( ' ' );
            printAline( n, x, ' ', '|', i == y );
            puts("");
        }
        
        else {
            
            putchar( '<' );
            printAline( n, x, '-', '+', i == y );
            puts(">");
        }
    }
    
    for( i = -n; i++; ) putchar( ' ' );
    puts(" v");
    
    return 0;
}

void printAline( int n, int x, char c, char m, int b )
{
    for(int i = -n; i <= n; i++) {
    
        if( b ) {
            
            i == x ? putchar( 'X' ) : i ? putchar( c ) : putchar( m );
        }
        else {

            i ? putchar( c ) : putchar( m );
        }
    }
}

r
表示行,表示正在打印的当前行。

在此上下文中,“坐标系”到底是什么?请提供更多详细信息,包括示例输入和预期输出。@kaylum我编辑过,我会发布一张它应该是什么样子的图片,但我不知道这是否是一个选项。请使用函数。不要在main中编码一点也不坏,但是您可能希望将列输出的大小增加一倍,以更接近于行高度。(例如,为轴上的每列输出
“-”
,而不是
“-”
)您也必须同样调整剩余的水平定位。但值得一点。非常感谢,这是一种更简单的方法,而且非常有意义。@DavidC.Rankin但是我们可以用“-”吗?因为我们用putchar表示c(-)?“—”不是一根绳子吗?在C语言中我几乎是个乞丐,我经常使用python,所以对我来说它没有什么意义。@DavidC.Rankin是的,它看起来会更好。我没有将列折叠起来的原因是,这样就不可能将
X
置于其坐标的中心。@Davide哈哈,谢谢你,我自己计算出来的,但谢谢你的努力!没有你我不可能做到。
#include <stdio.h>

void printAline( int n, int r, int x, int y, char c, char m );

int main() {

    int i, x = 3, y = -5, n = 9;
    
    for( i = -n; i++; ) putchar( ' ' );
    puts(" ^");
    
    for(i = n; i >= -n; i--) {
        
        if( i ) {
            
            putchar( ' ' );
            printAline( n, i, x, y, ' ', '|' );
            puts("");
        }
        
        else {
            
            putchar( '<' );
            printAline( n, i, x, y, '-', '+' );
            puts(">");
        }
    }
    
    for( i = -n; i++; ) putchar( ' ' );
    puts(" v");
    
    return 0;
}

void printAline( int n, int r, int x, int y, char c, char m )
{
    for(int i = -n; i <= n; i++) {
    
        if( r == y ) i == x ? putchar( 'X' ) : i ? putchar( c ) : putchar( m );
        
        else if( i <= 0 || !r ) i ? putchar( c ) : putchar( m );
        
        else return;
    }
}