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() 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'; これにより、終了文字が行の先頭に配置されるため、次の行を読み取るために使用できます。

于 2013-10-17T17:55:02.367 に答える