C语言:使用c语言画表格

目录

 ​编辑

一.前提注意:

二.代码如下: 

三.结果如下


效果如下:

一.前提注意:

不要设置太大的格子,控制台放不下的话会乱掉 

想要完成这个任务,我们首先需要把控制台想象成充满行列的表格。我们使用光标来控制图形的输出。

二.代码如下: 

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <Windows.h>
#include <conio.h>
#include <stdlib.h>


#define HIGH 3  //单个格子的宽
#define LONG 10 //单个格子的长


int i = 0;
int k = 0;

void gotoxy(int x, int y)//可以不用知道是干嘛的。//定位光标的位置
{
    HANDLE hOut;
    COORD pos = { x,y };
    // 光标的起始位(第1列,第3行) 0是第1列 2是第3行
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
    //printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}


void paintWin1(int Lon, int Hig, int x, int y, int i, int j)//15 3 0 0 3 4//15 3 15 0 3 4//15 3 60 0 3 4// 长 宽 x轴位置 y轴位置 几行 几列
{
    gotoxy(x, y);
    if (x == 0 && y == 0)
    {
        printf("┏");
        for (int j = 1; j < Hig; j++)
        {
            gotoxy(x, j + y);
            printf("┃");
        }
    }

    else if (x != Lon * j  && y == 0)
    {
        printf("┬\n");
        for (int m = 1; m < Hig; m++)
        {
            gotoxy(x, m + y);
            printf("┃");
        }

        for (int m = 1; m < Hig; m++)
        {
            gotoxy(x + Lon, m +y);
            printf("┃\n");
        }
    }
    else if(x == Lon * j && y == 0)
    {
        gotoxy( Lon*j, y);
        printf("┓\n");
        return;
    }
    gotoxy(x + 1, y);
    for (int b = 1; b < Lon; b++) //添加横的线
    {
        printf("━");
    }
    
}
void paintWin2(int Lon, int Hig, int x, int y, int i, int j)//i,j 几行,几列  //15 2 0 2 3 4
{
        gotoxy(x, y + Lon);
        for (int m = 1; m < Hig; m++)
        {
            gotoxy(x, m + y);
            printf("┃\n");
        }
        gotoxy(x, y);      
        if (x == 0 )
        {
            printf("├");
        }
        else if (x != Lon * j )
        {
            printf("┼\n");
        }
        else if(x==Lon*j)
        {
            gotoxy(Lon*j, y);
            printf("┤\n");
            return;
        }
    gotoxy(x + 1, y);
    for (int b = 1; b < Lon; b++)
    {
        printf("━");
    }
}

void paintWin3(int Lon, int Hig, int x, int y, int i, int j)
{
    gotoxy(x, y);
    if (x == 0 && y == i * Hig)
    {
        printf("└");
    }
    else if (x !=j*Lon &&y==i*Hig)
    {
        printf("┴\n");
    }
    else if(x == Lon * j && y == Hig*i)
    {
        gotoxy(j* Lon, Hig*i);
        printf("┘\n");
        return;
    }
    gotoxy(x + 1, y);
    for (int b = 1; b < Lon; b++)
    {
        printf("━");
    }
}

void win1(int n, int m)//几行 列
{
    system("cls");//清理屏幕
    for (int k = 0; k <= m; k++)
    {
        paintWin1(LONG, HIGH, LONG * k, 0, n, m);//x位置不断变化
    }
}
void win2(int n, int m)
{
    for (int z = 1; z < n; z++)
    {
        for (int k = 0; k <= m; k++)
        {
            paintWin2(LONG, HIGH, LONG * k, HIGH*z, n, m);
        }
    }
}
void win3(int n, int m)
{
    for (int k = 0; k <= m; k++)
    {
        paintWin3(LONG, HIGH, LONG * k, n*HIGH, n, m);//x位置不断变化
    }
}



int main()
{
    int n = 5, m = 4;
    printf("请输入n*m的方格数(注意 n<10 && m<8)");//根据设置的格子大小,n,m的范围会变化
    scanf("%d %d", &n, &m);

    win1(n, m);
    win2(n, m);
    win3(n, m);

    gotoxy(4, 20);
    return 0;
}


三.结果如下

初学c语言,有很多不规范的地方,请多指教啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值