C printf缩进问题

时间:2015-01-15 06:39:19

标签: c printf

我希望正确缩进以下内容,我希望DG1, DG2, DG3, DG4应该在同一列中,是否有最佳方法?谢谢,任何指针或帮助将不胜感激。


      Test                                                                 DG1                                                                 
                                                                       DG2                                                                     
                                                                       DG3                                                                     
                                                                       DG3                                                                     

sh-4.2#^ C

#include <stdio.h>

int main()
{
    printf("%-64s\t%s\n", "List", "Bindings");
    printf("-----------------------------------------------------------------------------\n");

    const char *curr_dl_result[] = {
        [0] = "DG1",
        [1] = "DG2",
        [2] = "DG3",
        [3] = "DG3",
    };
    int dg_count = 4;
    int  j = 0;
    char buff[1024];
    printf("%s", "Test");
    if(dg_count) {
        unsigned char is_print_done = 0;     
        for(j = 0; j < dg_count; j++) {     
            printf("%78s\n", (curr_dl_result[j]));
            is_print_done = 1;
        }
    } else {
        printf("%78s\n","-" );
    }
return 0;
}

4 个答案:

答案 0 :(得分:1)

为什么不改变

printf("%s", "Test");

printf("%s\n", "Test"); 

这将正确打印并缩进DG1,DG2,DG3,DG4并在测试后打印一行如果你不介意的话。http://ideone.com/ZhOlhF

答案 1 :(得分:1)

也许使用printf返回打印的字符数的事实, 然后在打印最后一个字符串之前用空格填充。

#include <stdio.h>

void my_out(const char* str1, const char* str2)
{
    int len = printf("%s", str1);
    int i;
    for( i=len ; i<60 ; i++ )
    {
        printf(" ");
    }
    printf("%s\n", str2);
}

int main()
{

    my_out("List", "Bindings");
    printf("-----------------------------------------------------------------------------\n");

    const char *curr_dl_result[] = {
        [0] = "DG1",
        [1] = "DG2",
        [2] = "DG3",
        [3] = "DG3",
    };

    my_out("Test",curr_dl_result[1]);
    my_out("Test  eee",curr_dl_result[2]);
    my_out("Test 22",curr_dl_result[3]);
    return 0;
}

这将打印:

List                                                        Bindings
-----------------------------------------------------------------------------
Test                                                        DG2
Test  eee                                                   DG3
Test 22                                                     DG3

答案 2 :(得分:0)

E.g。用printf替换for内的if应该可以解决问题:

if (j == 0)
     printf("%74s\n", (curr_dl_result[j])); // account for "Test" (4 chars) on same line
else
     printf("%78s\n", (curr_dl_result[j]));

答案 3 :(得分:0)

一些动态分配怎么样(仍然有一些硬编码的东西,但更通用):

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

int main()
{
    printf("%-64s\t%s\n", "List", "Bindings");
    printf("-------------------------------------------------------------------------------\n");

     const char *curr_dl_result[] = {
        [0] = "DG1",
        [1] = "DG2",
        [2] = "DG3",
        [3] = "DG3",
     };
     int dg_count = 4;
     int  j = 0;
     int pos = printf("%s", "Test");
     if(dg_count) {
         unsigned char is_print_done = 0;
         for(j = 0; j < dg_count; j++) {
             char *spacer = malloc(74-pos*sizeof(char));
             memset(spacer, ' ', 74-pos);
             printf("%s", spacer);
             printf("%s\n", (curr_dl_result[j]));
             is_print_done = 1;
             pos = 0;
             free(spacer);
         }
     }
     else {
         printf("%78s\n","-" );
     }
    return 0;
}