2013-10-17 83 views
1

这是我从我的教授那里得到的代码,但我没有完全理解它,因为它到达while循环。 谁能向我解释如下:文本文件的副本

  1. while(fscanf(pin, "%[^\n]", line) != EOF)
  2. fscanf(pin, "%1[\n]", dummy);
  3. line[0] = '\0';

顺便说一句,要复制的文本文件包含:

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; 
} 

回答

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'; 这使得终止字符行的开始,所以它可以用于读取下一行。

+0

谢谢!帮助了我很多! :) – dboy