C 格式化从txt文件读取的数据

C 格式化从txt文件读取的数据,c,format,C,Format,该程序的目的是读取文件并将其格式化为每行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 *wbu

该程序的目的是读取文件并将其格式化为每行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);

}
}
#包括
#包括
#定义\u CRT\u SECURE\u NO\u弃用
无效输出(字符*wbuf,字符*lbuf);
void readFile(FILE*getty,char*wbuf,char*lbuf);
文件*盖蒂;
静态int lineLength=62;
内部主(空){
char wbuf[1000]={0},lbuf[1500]={0};
如果(fopen_s(&getty,“getty.txt”,“r”)!=0)
printf(“无法打开getty.txt进行读取。”);
否则{
readFile(getty、wbuf、lbuf);
}
fclose(getty);
返回0;
}
void readFile(文件*getty,字符*wbuf,字符*lbuf){
整数计数=0;
而(!feof(getty)){
如果(fscanf(getty,“%s”,wbuf)>0){
strcat(wbuf,“”);
输出(wbuf、lbuf);
}
}
printf(“%s\n”,lbuf);
}
无效输出(字符*wbuf,字符*lbuf){
int wbufLength=0,lbufLength,i=0;
wbufLength=strlen(wbuf);
lbufLength=strlen(lbuf);

如果((wbufLength+lbufLength),则问题在于仅添加lineLength变量

lineLength += 62;
通过将62添加到行长度,您可以假设lbuf中已使用了62个字符,但事实并非如此。通常情况下,您会使用更少的字符,因为适合62个字符的字数通常会少于62个字符。因此,所有后续计算都会稍微减少

您应该使用以下内容设置新的线宽值:

lineLength  = strlen(lbuf) + 62;
还要注意的是,这不是一个完美的算法,因为在检查每个单词是否合适之前,您要在每个单词上添加一个空格。这意味着一个刚好适合62个字符限制的单词最终会被包装,因为空格会将其推过限制。我不知道这是否是您的问题