0

该程序的目的是读取文件并将其格式化为每行 62 个字符。该程序编译并部分工作,大多数行是 62 个字符或更少,但有些行实际上是 64 个字符。

我想知道如何让它为所有行打印 62 个字符或更少?

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

#define _CRT_SECURE_NO_DEPRECATE

void output(char *wbuf, char *lbuf);
void readFile(FILE *getty, char *wbuf, char *lbuf);

FILE *getty;
static int lineLength = 62;
int main(void) {
char wbuf[1000] = {0}, lbuf[1500] = {0};

if (fopen_s(&getty,"getty.txt", "r") != 0 )
    printf("Failed to open getty.txt for reading.");
else {
    readFile(getty, wbuf, lbuf);
}

fclose(getty);
return 0;
}

void readFile(FILE *getty, char *wbuf, char *lbuf) {
int count = 0;


while (!feof(getty) ) {
    if (fscanf(getty, "%s", wbuf) > 0) {
        strcat(wbuf," ");
        output(wbuf, lbuf);


    }
}
printf("%s\n",lbuf);
}

void output(char *wbuf, char *lbuf) {

int wbufLength=0, lbufLength, i = 0;


wbufLength = strlen(wbuf);
lbufLength = strlen(lbuf);

if ( (wbufLength + lbufLength) <= lineLength) {
    strcat(lbuf,wbuf);

}
else {
    strcat(lbuf,"\n");
    lineLength += 62;
    strcat(lbuf, wbuf);

}
}

输出:四分零七年前,我们的父亲在这片大陆上带来了,//58 个字符,一个新的国家,在自由中孕育,并致力于人人生而平等的主张。现在 // 64 字符我们正在进行一场伟大的内战,测试那个国家或任何国家,如此构思和如此专注,是否能够持久。我们在那场战争的伟大战场上相遇。我们将其中的一部分奉献给那些在这里献出生命以使该国得以生存的人们的最后安息之地。我们应该这样做是完全合适和适当的。但在更大的意义上,我们不能奉献——我们不能奉献——我们不能把这片土地神圣化。在这里奋斗过的勇敢的人们,无论生者还是死者,都将它奉献给了我们,远远超过了我们增加或减少的可怜能力。世界不会注意到,也不会忘记,我们在这里说了什么,却永远无法忘记他们在这里所做的。对于我们这些活着的人来说,宁愿在这里献身于他们迄今为止如此高尚地进行的未完成的工作。更确切地说,我们要在这里献身于摆在我们面前的伟大任务,从这些光荣的死者身上,我们对他们在这里给予最后全部奉献的事业更加投入——我们在此下定决心,这些死者将不会已经白白死去;这个国家将获得自由的新生;使这个民有、民治、民享的政府不会从地球上消失。更确切地说,我们要在这里献身于摆在我们面前的伟大任务,从这些光荣的死者身上,我们对他们在这里给予最后全部奉献的事业更加投入——我们在此下定决心,这些死者将不会已经白白死去;这个国家将获得自由的新生;使这个民有、民治、民享的政府不会从地球上消失。更确切地说,我们要在这里献身于摆在我们面前的伟大任务,从这些光荣的死者身上,我们对他们在这里给予最后全部奉献的事业更加投入——我们在此下定决心,这些死者将不会已经白白死去;这个国家将获得自由的新生;使这个民有、民治、民享的政府不会从地球上消失。

4

1 回答 1

0

问题是当您添加lineLength变量时。

lineLength += 62;

通过将 62 添加到lineLength,您假设您已经用完lbuf中的 62 个字符,但事实并非如此。您通常会用得更少,因为适合 62 个字符的单词数量通常最终会少于 62 个字符。结果,所有随后的计算都将略有偏差。

您应该使用以下设置新的lineLength值:

lineLength  = strlen(lbuf) + 62;

另请注意,这不是一个完美的算法,因为在检查它是否适合之前,您要在每个单词上添加一个空格。这意味着恰好适合 62 个字符限制的单词最终会被换行,因为空间将其推到了限制之外。我不知道这对你来说是不是一个问题。

于 2013-07-01T20:16:06.690 回答