C中如何逐行打印出一个txt文件?

In C, how to print out a txt file line by line?

int main()
{
   FILE *infile;
   FILE *infile2;
   char input[255],input2[255];
   int status1, status2;

   infile = fopen("test.txt", "r");
   infile2 = fopen("test2.txt", "r");
   if(infile == NULL)
   {
      printf("Can not open file 1!\n");
   }
   else if(infile2 == NULL)
   {
      printf("Can not open file 2!\n");
   }
   else
   {
      do
      {
        status1 = fscanf(infile, "%s", &input);
        status2 = fscanf(infile2, "%s", &input2);

        printf("File 1: %s\n File 2: %s\n", input, input2);
     }while(status1 != -1 || status2 != -1);
   }
   fclose(infile);
   fclose(infile2);

   return 0;
}

我的输出如下所示:

Output

我想一行打印出文件 1,而不是逐字打印。 file2 也是如此。我对 C 有点陌生,所以我被卡住了。

当您使用 fscanf 时,它只会读取字符,直到出现非白色 space 字符。当您需要将输入作为整行输入时,您必须使用 fgets()

来自 fgets()man 页。

fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A terminating null byte ('[=16=]') is stored after the last character in the buffer.

所以你必须这样使用。

  fgets(input,255,infile);
  fgets(input2,255,infile2);

在检查条件时,

while(input != NULL || input2 != NULL);

如果您想阅读整行,请使用 fgets 函数而不是 fscanf:

char *status1, *status2;
   .
   .
   .
do {
    status1 = fgets(input, sizeof(input), infile);
    status2 = fgets(input2, sizeof(input2), infile2);
    printf("File 1: %s File 2: %s", input, input2);
} while (status1 || status2);

请注意 printf 如何不再使用 \n。这是因为 fgets 将文件中的 \n 保留在输入字符串中。

在我的学校,我们制作了一个 get_next_line 函数,它在参数中接受一个文件描述符和一个指向字符串的指针。

你可以在这里看看:https://github.com/juschaef/libtowel/search?utf8=%E2%9C%93&q=get+next+line

我对代码进行了更改并且它有效,但另一个问题。如果我想比较文件并将差异写入新文件,如下所示:

  1. 文件1:我叫克努特
  2. 文件 2:我叫 KnutAndre
  3. 文件3:安德烈(这是文件之间的区别)。

我的老师告诉我使用 strcmp 然后将输出输出到一个新文件中,但我不太理解他..有没有人有一些我可以尝试的提示?

到目前为止我的代码是这样的:

int main()
{

FILE *infile;
FILE *infile2;
FILE *outfile3;
char input[255],input2[255];
char status1, status2;



infile = fopen("test.txt", "r");
infile2 = fopen("test2.txt", "r");

if(infile == NULL)
{
    printf("Can not open file 1!\n");
}
else if(infile2 == NULL)
{
    printf("Can not open file 2!\n");
}
else
{
    do
    {
        status1 = fgets(input, sizeof(input), infile);
        status2 = fgets(input2, sizeof(input2), infile2);

        if(status1 != 0){

        printf("File 1: %s\n\nFile 2: %s\n\n", input, input2);

        int result = strcmp(input, input2);
        printf("\nResult = %d\n\n", result);

        }


    }
    while(status1 || status2);

}
fclose(infile);
fclose(infile2);

return 0;



}