C-FGET如何处理多个调用
我有以下代码:C-FGET如何处理多个调用,c,file,fgets,C,File,Fgets,我有以下代码: int i = 0; char ar[500]; while(i < 20) { printf("Type a line: "); fgets(ar, 500, stdin); fprintf(fp,"%s", ar); i++; } inti=0; char-ar[500]; 而(i
int i = 0;
char ar[500];
while(i < 20)
{
printf("Type a line: ");
fgets(ar, 500, stdin);
fprintf(fp,"%s", ar);
i++;
}
inti=0;
char-ar[500];
而(i<20)
{
printf(“类型a行:”);
fgets(ar、500、标准DIN);
fprintf(fp,“%s”,ar);
i++;
}
基本上,我尝试打开一个文件,然后从用户那里获取20行输入并将其存储在一个数组中,然后将其打印到文件中。它工作得很好,但我不明白fgets在while循环中是如何工作的。据我所知,当i=0时,fgets将第1行存储到ar[500],fprintf将其打印到文件中;当i=1时,fgets将第2行存储到ar[500],但现在ar[500]有2行,但为什么fprintf仅将第2行打印到文件中,而不是将所有2行打印到文件中,依此类推。fgets总是在arr[0]处开始填充数组. 在每次迭代中,上一行被覆盖。fgets将在arr中为您添加空终止字符,因此只有当前读取的行将输出到fp指向的文件。每次都将覆盖缓冲区
ar
fgets
具有原型char*fgets(char*str,intn,FILE*stream)
。它将从stream
读取最多n-1
个字符,并将它们写入str
,然后添加'\0'
字符。字符*fgets(字符*restrict s,int n,文件*restrict stream)的描述;
是:
2fgets
函数从流指向的流读取到s
指向的数组中的字符数最多比n
指定的字符数少一个。在新行字符(保留)之后或文件结尾之后,不会读取其他字符。在读取到数组中的最后一个字符之后立即写入空字符
fgets
读取的第一个字符将始终存储在s[0]
处,以此类推,直到至多遇到s[n-1]
或第一个换行字符(它是存储的最后一个字符)。最后一次读取字符后的元素将设置为'\0'
,因此终止字符串
即,fgets
调用将覆盖数组中的k+1
第一个元素,其中k
是行的长度或n
,以较小者为准,1
表示空终止
要存储20行,您需要一个数组:
char ar[20][500];
然后读入ar[i]
关于:“但是现在ar[500]有两行,”
否,函数fgets()
不追加
相反,它是重叠的
在发布的代码中,始终从
ar[0]
读取while循环:while(fgets(ar,500,fp))put(ar);要读取文件,每次fgets读取时,它都会返回下一行(就像第一次一样,fgets读取第一行的文件并将其打印到屏幕上,第二次,它返回第二行,将其打印到屏幕上,依此类推)。你知道fgets是如何记住它放在哪里的吗。@ThuanNguyenfgets
不记得,但是FILE
s有一个固有的机制——在读取文件时向前移动。