You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

实现带居中对齐打印的数字质因数分解

让C程序的质因数分解输出居中对齐的方法

嘿,没问题!要让你的质因数分解输出居中对齐,核心思路是先计算需要在内容左侧填充的空格数,再结合printf的格式控制来实现。下面分两种场景给你具体方案:

一、固定终端宽度的简单实现

如果不需要适配不同终端大小,假设终端默认是80列(大部分终端的默认宽度),可以按以下步骤做:

  1. 把要输出的质因数分解内容拼接成字符串(或者直接计算内容的字符长度);
  2. 计算左侧填充的空格数:padding = (80 - 内容长度) / 2
  3. printf%*s格式动态指定空格长度,再输出核心内容。

举个代码片段例子:

#include <stdio.h>
#include <string.h>

int main() {
    int num = 12;
    // 假设已完成质因数分解,生成输出字符串
    char output_str[100];
    sprintf(output_str, "%d = 2 * 2 * 3", num);
    
    int content_len = strlen(output_str);
    int terminal_width = 80;
    int padding = (terminal_width - content_len) / 2;
    // 避免内容过长时padding为负数
    if (padding < 0) padding = 0;
    
    printf("%*s%s\n", padding, "", output_str);
    return 0;
}

二、动态适配终端宽度的灵活实现

如果想让程序自动适配当前终端的实际宽度,可以通过ioctl函数获取终端窗口的列数,这样不管终端大小怎么调整,输出都能保持居中。

需要额外引入两个系统头文件,完整代码示例如下:

#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>

// 获取当前终端的列数
int get_terminal_width() {
    struct winsize w;
    ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
    return w.ws_col;
}

int main() {
    int num = 12;
    char output_str[100];
    sprintf(output_str, "%d = 2 * 2 * 3", num);
    
    int content_len = strlen(output_str);
    int terminal_width = get_terminal_width();
    int padding = (terminal_width - content_len) / 2;
    if (padding < 0) padding = 0;
    
    printf("%*s%s\n", padding, "", output_str);
    return 0;
}

小提示

  • 如果你的程序要输出多行质因数分解结果,只需要对每一行重复上述计算和输出逻辑即可;
  • 当输出内容长度超过终端宽度时,程序会自动取消居中(将padding设为0),避免内容被截断或格式混乱。

这样就能让你的质因数分解输出完美居中啦!

内容的提问来源于stack exchange,提问作者Catalin Woods

火山引擎 最新活动