这是我从我的教授那里得到的代码,但是当它到达while循环时我不完全理解它。 有人可以向我解释以下内容:
while(fscanf(pin, "%[^\n]", line) != EOF)
fscanf(pin, "%1[\n]", dummy);
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;
}
答案 0 :(得分:2)
你应该看看fscanf() reference。这是解释:
while(fscanf(pin, "%[^\n]", line) != EOF)
:
保持读取任意数量的字符,直到达到\ n为止。当达到EOF时,代码继续,即循环结束时。
fscanf(pin, "%1[\n]", dummy);
:
读取'\ n'并将其放入虚拟中。此行可以更改为fscanf(pin, "%*1[\n]");
line[0] = '\0';
这将终止字符放在行的开头,因此可以用它来读取下一行。