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

1 回答 1

2

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

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

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

  3. line[0] = '\0'; 这会将终止字符放在行首,因此可用于读取下一行。

于 2013-10-17T17:55:02.367 回答