如何使用fprintf/printf打印短划线或点?

Thi*_*Thi 8 c c++ printf text

截至目前,我正在使用下面的线来打印出点

fprintf( stdout, "%-40s[%d]", tag, data);
Run Code Online (Sandbox Code Playgroud)

我期待输出会像下面这样,

Number of cards..................................[500]
Fixed prize amount [in whole dollars]............[10]
Is this a high winner prize?.....................[yes]

如何使用fprintf/printf打印短划线或点?

Ate*_*ral 10

更快的方法:

如果事先知道您需要的最大填充量(通常是在格式化固定宽度表时的情况,例如您所拥有的那个),则可以使用静态"padder"字符串并且只是抓住一大块.这比调用printfcout循环更快.

static const char padder[] = "......................"; // Many chars

size_t title_len = strlen(title);
size_t pad_amount = sizeof(padder) - 1 - title_len;

printf(title); // Output title

if (pad_amount > 0) {
    printf(padder + title_len); // Chop!
}

printf("[%d]", data);
Run Code Online (Sandbox Code Playgroud)

你甚至可以在一个声明中做到这一点,有一些信念的飞跃:

printf("%s%s[%d]", title, padder + strlen(title), data);
Run Code Online (Sandbox Code Playgroud)


Kei*_*thB 9

您可以使用iostreams而不是printf轻松完成此操作

cout << setw(40) << setfill('.') << left << tag[i] << '[' << data[i] << ']' << endl;
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的需要使用fprintf(比如,你传递了一个FILE*来写)

strstream str;
str << setw(40) << setfill('.') << left << tag[i] << '[' << data[i] << ']' << endl;
printf(%s", str.str());
Run Code Online (Sandbox Code Playgroud)