c语言输出格式%*s

举个例子,比较好说明一下
printf("%*s",5,"123");
执行一下,这条语句,输出
##123

(#代表一个空格)
类似于%5d 这样的状况

这里*被常量5代替,用于控制最小字符宽度,主要是针对,最小字符宽度未知的情况,当然*可以对应整型变量

来源:https://zhidao.baidu.com/question/310414478.html


贴一道蓝桥杯的填空题,要用到%*s输出

2015蓝桥省赛

4.StringInGrid函数会在一个指定大小的格子中打印指定的字符串。

要求字符串在水平、垂直两个方向上都居中。

如果字符串太长,就截断。

如果不能恰好居中,可以稍稍偏左或者偏上一点。

 

下面的程序实现这个逻辑,请填写划线部分缺少的代码。

 

#include <stdio.h>

#include <string.h>

 

void StringInGrid(intwidth, int height, const char* s)

{

    int i,k;

    char buf[1000];

    strcpy(buf, s);

    if(strlen(s)>width-2) buf[width-2]=0;

   

    printf("+");

    for(i=0;i<width-2;i++) printf("-");

    printf("+\n");

   

    for(k=1; k<(height-1)/2;k++){

        printf("|");

        for(i=0;i<width-2;i++) printf(" ");

        printf("|\n");

    }

   

    printf("|");

   

    printf("%*s%s%*s",_____________________________________________);  //填空

             

    printf("|\n");

   

    for(k=(height-1)/2+1; k<height-1; k++){

        printf("|");

        for(i=0;i<width-2;i++) printf(" ");

        printf("|\n");

    } 

   

    printf("+");

    for(i=0;i<width-2;i++) printf("-");

    printf("+\n"); 

}

 

int main()

{

    StringInGrid(20,6,"abcd1234");

    return 0;

}


对于题目中数据,应该输出:

+------------------+

|                          |

|    abcd1234    |

|                          |

|                          |

+------------------+

 

(如果出现对齐问题,参看【图1.jpg】)

 

注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。




答案:printf("%*s%s%*s",(width-strlen(buf))/2-1,"",buf,(width-strlen(buf))/2-1,"");

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值