gpt4 book ai didi

c - 你如何居中对齐N行文本

转载 作者:行者123 更新时间:2023-12-04 02:15:55 26 4
gpt4 key购买 nike

显然在 C 语言中没有标准化的居中对齐方式,所以我想

想知道的是如何编写 if 语句使接下来的 N 行居中对齐

的文本。例如,如果程序在文本文件中找到 .ce2,它应该

在页面中央打印接下来的两行,然后照常进行。

.ce2 This is my heading
Lesson 1
Task 2

输出:

                       This is my heading

Lesson 1

任务 2

下面是我写的代码,我实现了.br特性来打破

句子以及 .sp 功能,用于在文本中添加空行。

int main(void) {
FILE *fp = NULL;
char file_name[257] = {'\0'};
char line[61] = {'\0'};
char word[61] = {'\0'};
int out = 0;
int blanks;
int space;

printf ( "Enter file name:\n");
scanf ( " %256[^\n]", file_name);

if ( ( fp = fopen ( file_name, "r")) == NULL) {
printf ( "could not open file\n");
return 1;
}

while ( ( fscanf ( fp, "%60s", word)) == 1) { //breaks the sentence after .br
if ( strcmp ( word, ".br") == 0) {
printf ( "%s\n", line);
line[0] = '\0';
out = 1;
}

if ( strncmp ( word, ".sp", 3) == 0) { // creates n amount of spaces after .sp
if ( ( sscanf ( &word[3], "%d", &blanks)) == 1) {
printf ( "%s\n", line);
while ( blanks) {
blanks--;
printf ( "\n");
}
line[0] = '\0';
out = 1;
}

if ( strncmp ( word, ".ce", 3) == 0) { // centre the next n lines
if ( ( sscanf ( &word[3], "%d", &space)) == 1) {
//this is the if statement I am stuck at on what to include
}
line[0] = '\0';
out = 1;
}

最佳答案

printf 不提供使文本居中的机制,但它确实提供了使文本(字段宽度)右对齐的机制以及将字段宽度指定为参数的机制。把这两个放在一起,很容易让文本居中:

int print_centered(FILE* f, const char* str, int width) {
int len = strlen(str);
if (len < width)
return fprintf(f, "%*s\n", (width + len) / 2, str);
else /* Line is too long to fit */
return fprintf(f, "%s\n", str);
}

如果你想截断太长的行,你可以使用“精度”,在 %s 格式的情况下,它限制了要打印的字符串的长度:

int print_centered_or_truncated(FILE* f, const char* str, int width) {
int len = strlen(str);
if (len < width)
return fprintf(f, "%*s\n", (width + len) / 2, str);
else /* Line is too long to fit */
return fprintf(f, "%.*s\n", width, str);
}

参见 man fprintf了解更多详情。

关于c - 你如何居中对齐N行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com