これはCの割り当てです。私は誰かに私のためにこれをするように頼んでいません、私はただ壁にぶつかっただけです。明日ですが、どうすればいいのかわかりません。私は初心者で、頭が痛くなり始めています
与えられた数の列にうまく収まるようにテキストをフォーマットするANSICプログラムを作成します。テキストフォーマッタは、入力テキストファイルを右揃えにして、1つの例外を除いて、右マージンが一直線に並ぶようにする必要があります。最後の行は正しく正当化されていません。また、段落は一緒にマージされません。出力ライン間のスペースは等間隔である必要があります。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define IN 1
#define OUT 0
/*
This is the start of the main pgoram which originated from the K & R word counter...
we comment to understand each part...
*/
int main()
{
/*
* This is the pointer to the file object we will be readin in
* from...
*/
FILE *ptr_file;
char *outputbuf;
/*
* This variable will hold the maximum width of the line we are to
* output
*/
int width;
char eatspace;
char c; /* We read each character invidually */
int state = OUT;
int nc = 0; /* This is the total count of all words in the document */
int nl = 0; /* This is the total count of newlines in the document */
int nw = 0;
int lw = 0; /* Count the total whitespaces spaces per line */
int buff_offset = 0; /* Keep track of how many letters we are into the current output line */
/* Opens a file stream for the .txt file to be read in */
ptr_file = fopen("hollo_man.txt", "r");
if ((fopen("hollo_man.txt", "r")) != NULL) {
/*
* This loop reads in one character at a time until the end
* of file
*/
/* Read the first line to get the width of the output */
fscanf (ptr_file, "%i", &width);
outputbuf = (char*) malloc(width + 1);
//fscanf(ptr_file, "%c", &eatspace);
int prev_char_was_space = 0;
while ((c = fgetc(ptr_file)) != EOF)
{
++nc;
if (c == '\n' || strlen(outputbuf) == width)
{
outputbuf[buff_offset] = '\0';
++nl;
// printf("Saw a newline, newline count is now: %i\n", nl);
/* Our buffer needs to be ended since we saw a newline */
for(int i = 0; i < (width - buff_offset); i++)
{
printf(" ");
}
printf("%s\n", outputbuf);
memset(outputbuf, width, '\0');
buff_offset = 0;
prev_char_was_space = 0;
}
/* This more verbose check is to see if there is other whitespace */
else if (isspace(c))
{
/* We only store one space between words in the output, this allows us to easily and evenly pad with white space later */
if (!prev_char_was_space)
{
outputbuf[buff_offset] = c;
outputbuf[buff_offset + 1] = '\0';
buff_offset++;
lw++;
prev_char_was_space = 1;
}
}
else /* This was not a whitespace character so store it in the current line buffer */
{
prev_char_was_space = 0; /* Keep track that we didnt have a whitespace for the next iteration */
outputbuf[buff_offset] = c;
buff_offset++;
++nw;
}
} /* End reading each character */
/* This line should indeed print output to console for now */
//fprintf(stderr, "ORIG LINE COUNT: %d\nORIG WORD COUNT: %d\nORIG CHAR COUNT: %d\n", nl, lw, nc);
/* Close our file and clean up */
fclose(ptr_file);
}
return 0;
}
空白行を印刷するだけです。別のバッファが必要だと思いますが、よくわかりません。それを印刷してから、単語をパディングされたスペースで等間隔に配置するにはどうすればよいですか?また、割り当てられた幅に各行を印刷する方法もわかりません。どんな助けでも大歓迎です!