首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言打印水平空格

用C语言打印水平空格
EN

Stack Overflow用户
提问于 2012-01-14 17:45:21
回答 4查看 1.3K关注 0票数 0

在这部分代码中,我想插入用于打印的空格:

("tvtime_osd_list_set_multitext“删除前导空格)

线条:

代码语言:javascript
复制
        snprintf(buf, buf_length, "     %s %s", end_time, xmltv_get_next_title( xmltv ) ? xmltv_get_next_title( xmltv ) : "");     
        tvtime_osd_list_set_multitext( osd, cur++, buf, 1);

代码:

代码语言:javascript
复制
 int epg_show_nowandnext( tvtime_osd_t* osd, int page, station_mgr_t *stationmgr, xmltv_t *xmltv )
{
    if (!page)
        return 0;
    if ( xmltv ){
        const int buf_length = 255;
        const int max_num_lines = 15;
        const int num_station_per_page = max_num_lines / 3;
        const int num_stations = station_get_num_stations(stationmgr);
        char *old_channel = strdup(xmltv_get_channel(xmltv));
        char buf[buf_length+1];
        int i, count, cur = 0;


    /* List Header */
    snprintf(buf, buf_length, "Now showing and next on (%d/%d):", page, num_stations/num_station_per_page);
    tvtime_osd_list_set_text( osd, cur++, buf);
    tvtime_osd_list_set_hilight(osd, -1);   

    for (i = (page-1) * num_station_per_page, count = 0; (i < num_stations) && (count < num_station_per_page ); i++, count++) {
        const char *xmltv_id = 0;
        if (!(xmltv_id = station_get_xmltv_id( stationmgr, i))) 
            xmltv_id = xmltv_lookup_channel(xmltv, station_get_name( stationmgr, i));
        xmltv_set_channel( xmltv, xmltv_id);
        xmltv_refresh( xmltv );
        /* Channel number + name */
        snprintf(buf, buf_length, "[%s] %s:", station_get_channel(stationmgr,i), station_get_name( stationmgr, i));     
        tvtime_osd_list_set_multitext( osd, cur++, buf, 1);

        if (xmltv_get_title( xmltv )) {
            char start_time[50];
            char end_time[50];
            time_t start_timestamp = xmltv_get_start_time( xmltv );
            time_t end_timestamp = xmltv_get_end_time( xmltv );
            strftime( start_time, 50, "%H:%M", localtime( &start_timestamp ) );
            strftime( end_time, 50, "%H:%M", localtime( &end_timestamp ) );


            /* Highlight if current channel */
            if (station_get_current_id(stationmgr) == i+1)
                tvtime_osd_list_set_hilight(osd, cur-1);    

            /* starttime of current program + Now showing program */
            snprintf(buf, buf_length, "     %s %s", start_time, xmltv_get_title( xmltv ));      
            if (xmltv_get_sub_title( xmltv )){
                strncat(buf," (",buf_length-strlen(buf));  
                strncat(buf,xmltv_get_sub_title( xmltv ),buf_length-strlen(buf));
                strncat(buf,")",buf_length-strlen(buf));  
            }
            tvtime_osd_list_set_multitext( osd, cur++, buf, 1);

            /* endtime of current programme + Next program */       
            snprintf(buf, buf_length, "     %s %s", end_time, xmltv_get_next_title( xmltv ) ? xmltv_get_next_title( xmltv ) : "");      
            tvtime_osd_list_set_multitext( osd, cur++, buf, 1);

        } else {
            /* No program information available for this channel */
            tvtime_osd_list_set_text( osd, cur++, "");
            tvtime_osd_list_set_text( osd, cur++, "");
        }

    }
    tvtime_osd_list_set_lines( osd, cur );
    tvtime_osd_show_list( osd, 1, 1 );

    xmltv_set_channel(xmltv, old_channel);
    free(old_channel);
    xmltv_refresh( xmltv );

    if (cur > 1){
        return page;
    } else {
        return 0;
    }
} else {
    tvtime_osd_list_set_text( osd, 0, "No program information available" );
    tvtime_osd_list_set_lines( osd, 1 );
    tvtime_osd_show_list( osd, 1, 1 );
    return !page;
    }
}

此打印格式如下:

代码语言:javascript
复制
[05] TV5MONDE:
09:30 La Grange De Meslay Festival:Pavel Haas Quartet
10:00 TV5Monde Le Journal
[06] RAI UNO

我想用水平空格打印此格式:

代码语言:javascript
复制
[05] TV5MONDE:
    09:30 La Grange De Meslay Festival:Pavel Haas Quartet
    10:00 TV5Monde Le Journal
[06] RAI UNO

我把'*‘放在代码里

代码语言:javascript
复制
/* showing now  + next showing */       
snprintf(buf, buf_length, "*     %s %s", end_time, xmltv_get_next_title( xmltv ) ? xmltv_get_next_title( xmltv ) : "");     
tvtime_osd_list_set_multitext( osd, cur++, buf, 1);

输出结果(对我来说很难看):

代码语言:javascript
复制
[05] TV5MONDE:
*   09:30 La Grange De Meslay Festival:Pavel Haas Quartet
*   10:00 TV5Monde Le Journal
[06] RAI UNO

为了开个玩笑,如何让char '*‘看不见?

EN

回答 4

Stack Overflow用户

发布于 2012-01-14 17:47:59

查看各种输出修饰符,特别是字段宽度:http://www.cplusplus.com/reference/clibrary/cstdio/printf/

%10s这样的东西应该可以做到这一点。

或者,可以在行的开头添加制表符:'\t'

票数 1
EN

Stack Overflow用户

发布于 2012-01-14 17:50:12

buf包含空格。tvtime_osd_list_set_multitext有没有可能删除前导空格?

根据您的评论,tvtime_osd_list_set_multitext删除了前导空格,所以这就是导致问题的原因。要解决这个问题,也许可以使用另一个函数来打印空格,或者可以尝试通过在行首打印某种不可见的ASCII字符来“欺骗”它。

票数 1
EN

Stack Overflow用户

发布于 2012-01-14 17:50:01

您可以使用制表符转义代码:\t。例如:

代码语言:javascript
复制
printf("\tHello World!");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8861408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档