Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 文本文件的副本_C_File_Text_Scanf_Printf - Fatal编程技术网

C 文本文件的副本

C 文本文件的副本,c,file,text,scanf,printf,C,File,Text,Scanf,Printf,这是我从我的教授那里得到的一个代码,但我不完全理解它,因为它到达了while循环。 谁能给我解释一下: while(fscanf(pin,“%[^\n]”,line)!=EOF) fscanf(pin,“%1[\n]”,虚拟) 行[0]='\0' 顺便说一下,要复制的文本文件包含: 第1行 (空间) 第2行 (空间) (空间) 第3行 (空间) (空间) (空间) 第4行 #include <stdio.h> #define LNAME 31 #define LLINE 81 in

这是我从我的教授那里得到的一个代码,但我不完全理解它,因为它到达了while循环。 谁能给我解释一下:

  • while(fscanf(pin,“%[^\n]”,line)!=EOF)
  • fscanf(pin,“%1[\n]”,虚拟)
  • 行[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;
    }
    
    #包括
    #定义LNAME 31
    #第81页
    内部主(空)
    {
    锉刀*pin,*pout;
    字符名称输入[LNAME],名称输出[LNAME],行[LLINE];
    伪字符[LLINE];
    做
    {
    printf(“输入输入文件名:”);
    scanf(“%30s”,名称在中);
    pin=fopen(名称在“r”中);
    }while(pin==NULL);
    做
    {
    printf(“输入输出文件的名称:”);
    scanf(“%30s”,name_out);
    pout=fopen(名称“w”);
    }while(pout==NULL);
    while(fscanf(pin,“%[^\n]”,line)!=EOF)
    {
    输出文件中的fprintf(pout,“%s\n”,行);/**/
    printf(“%s\n”,第行);/*屏幕上的回声*/
    fscanf(引脚“%1[\n]”,虚拟);/*跳过“\n”*/
    行[0]='\0';/*重要,下一行为空*/
    }
    fclose(pin);
    fclose(撅嘴);
    printf(“\n\n”);
    返回0;
    }
    
    您应该看看。解释如下:

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

  • fscanf(pin,“%1[\n]”,虚拟):
    读取“\n”并将其放入虚拟。此行可以更改为
    fscanf(pin,“%*1[\n]”

  • 行[0]='\0'
    这会将终止字符放在行的开头,以便可以用来读取下一行


  • 非常感谢。帮了我很多忙!:)