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

时间:2016-02-04 09:47:42

标签: c file text fopen

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有点新意,所以我被卡住了。

4 个答案:

答案 0 :(得分:4)

如果您想阅读整行,请使用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保留在输入字符串中的文件中。

答案 1 :(得分:2)

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

  1. File1:我的名字是Knut
  2. File2:我的名字是KnutAndre
  3. File3:Andre(这是文件之间的差异)。
  4. 我的老师告诉我使用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;
    
    
    
    }
    

答案 2 :(得分:1)

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

来自man的{​​{1}}页。

  

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读后停止了          EOF或换行符。如果读取换行符,则将其存储到缓冲区中。终止空字节('\ 0')存储在最后一个字符之后          在缓冲区。

所以你必须这样使用。

fgets()

检查条件时,

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

答案 3 :(得分:1)

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

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