文本文件的副本

时间:2013-10-17 15:42:29

标签: c file text scanf printf

这是我从我的教授那里得到的代码,但是当它到达while循环时我不完全理解它。 有人可以向我解释以下内容:

  1. while(fscanf(pin, "%[^\n]", line) != EOF)
  2. fscanf(pin, "%1[\n]", dummy);
  3. line[0] = '\0';
  4. 顺便说一句,要复制的文本文件包含:

    第1行

    (空格)

    第2行

    (空格)

    (空格)

    第3行

    (空格)

    (空格)

    (空格)

    第4行

    #include <stdio.h>
    #define LNAME 31
    #define LLINE 81
    
    int main(void)
    {
      FILE *pin, *pout; 
      char name_in[LNAME], name_out[LNAME], line[LLINE];
      char dummy[LLINE];
    
      do
      {
        printf("Enter name of input file : ");
        scanf("%30s", name_in);
        pin = fopen(name_in, "r");
      } while(pin == NULL);
    
      do
      {
        printf("Enter name of output file: ");
        scanf("%30s", name_out);
        pout = fopen(name_out, "w");
      } while(pout == NULL);
    
    
      while(fscanf(pin, "%[^\n]", line) != EOF)
      {
    
        fprintf(pout, "%s\n", line);    /*In output file */
        printf("%s\n", line);           /*Echo on screen */
    
        fscanf(pin, "%1[\n]", dummy);   /*skip over '\n' */
        line[0] = '\0';                 /*important, when next line empty!!! */
      }
    
      fclose(pin);
      fclose(pout);
    
      printf("\n\n");
      return 0;
    }
    

1 个答案:

答案 0 :(得分:2)

你应该看看fscanf() reference。这是解释:

  1. while(fscanf(pin, "%[^\n]", line) != EOF): 保持读取任意数量的字符,直到达到\ n为止。当达到EOF时,代码继续,即循环结束时。

  2. fscanf(pin, "%1[\n]", dummy);: 读取'\ n'并将其放入虚拟中。此行可以更改为fscanf(pin, "%*1[\n]");

  3. line[0] = '\0'; 这将终止字符放在行的开头,因此可以用它来读取下一行。