【问题标题】:Copy of Text File文本文件的副本
【发布时间】:2013-10-17 15:42:28
【问题描述】:

这是我从教授那里得到的代码,但当它到达 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;
}

【问题讨论】:

    标签: c file text scanf printf


    【解决方案1】:

    你应该看看fscanf() reference。解释如下:

    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'; 这会将终止字符放在行首,因此可用于读取下一行。

    【讨论】:

    • 谢谢!帮了我很多! :)
    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2016-08-10
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多