C 使用sprintf将字符串居中

C 使用sprintf将字符串居中,c,printf,C,Printf,我有一个代码,希望在条之间的中间显示消息。我查看了C函数,发现没有任何东西允许我这样做 sprintf(message,"============================================================"); send_message(RED, message); sprintf(message, "[ Welcome %s ]", p->client_name); send_message(RED, message); sprintf(messag

我有一个代码,希望在条之间的中间显示消息。我查看了C函数,发现没有任何东西允许我这样做

sprintf(message,"============================================================");
send_message(RED, message);
sprintf(message, "[ Welcome %s ]", p->client_name);
send_message(RED, message);
sprintf(message,"============================================================");
send_message(RED, message);
我正在寻找一种通过计算用户名的大小来显示欢迎消息的方法。例如:

例1:

=============================================
                Welcome Carol                
=============================================
例2:

=============================================
               Welcome Giovanna               
=============================================

它没有特殊的函数,所以你应该计算一下

  • 计算条数和消息长度
  • 减去它们,然后除以2
  • 如果消息的长度为偶数,则将商加1
  • 将消息的长度添加到商中
示例代码:

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

int main(void) {
    char* message = "Welcome Giovanna";
    int len = (int)strlen(message);
    printf("===============================================\n"); // 45 chars
    printf("%*s\n", (45-len)/2 + ((len % 2 == 0) ? 1 : 0) + len, message);
    printf("===============================================\n");

    return 0;
}


PS:您可以将
(45 len)/2+((len%2==0)?1:0)
替换为
(46 len)/2
,以获得相同的结果,因为后者较短。

没有显式命令。只需计算文本和条中的字母数,建立差值,除以2,并在前面加上空格。@koalo但我如何计算条数并应用于名称消息?你能举个例子吗?如果我算对的话,你的横杆是45=的。在Giovanni示例中,消息有16个字符。45-16=29. 29/2=14.5,所以消息的左边应该是14或15个空格。我同意@koalo,但它需要进一步改进。你能看到我的答案并告诉我你的意见吗?=)使用p->client\u name提取名称如何识别名称的大小?如果
len%2==0
?,为什么要添加名称????无论如何,只要用
(46-len)/2
替换整个表达式,以将名称@LuisColorado居中,就可以得到相同的结果。的确,你是对的,答案更新了!
=============================================
               Welcome Giovanna               
=============================================