文件指针函数2

发布于:2023-01-22 ⋅ 阅读:(368) ⋅ 点赞:(0)
     前面章节介绍的 I/O 函数都类似于文件 I/O 函数。它们的主要区别是,文 件I/O 函数要用 FILE 指针指定待处理的文件。与 getc() putc() 类似,这些函数都要求用指向 FILE 的指针(如, stdout )指定一个文件,或者使用 fopen() 的返回值
fprintf() fscanf() 函数
     文件 I/O 函数 fprintf() fscanf() 函数的工作方式与 printf() scanf() 类似, 区别在于前者需要用第1 个参数指定待处理的文件。我们在前面用过 fprintf()。程序清单 13.3 演示了这两个文件 I/O 函数和 rewind() 函数的用法。
程序清单 13.3 addaword.c 程序
/* addaword.c -- 使用 fprintf()、fscanf() 和 rewind() */ 
#include <stdio.h> 
#include <stdlib.h>
#include <string.h> 
#define MAX 41 
int main(void) 
{
FILE *fp; 
char words[MAX];
if ((fp = fopen("wordy", "a+")) == NULL)
fprintf(stdout, "Can't open \"wordy\" file.\n"); 
exit(EXIT_FAILURE); 
puts("Enter words to add to the file; 
press the #"); 
puts("key at the beginning of a line to terminate."); 
while ((fscanf(stdin, "%40s", words) == 1) && (words[0] != '#')) 
fprintf(fp, "%s\n", words); 
puts("File contents:");
 rewind(fp); /* 返回到文件开始处 */ 
while (fscanf(fp, "%s", words) == 1) 
puts(words); puts("Done!");
 if (fclose(fp) != 0) 
fprintf(stderr, "Error closing file\n"); 
return 0; 
}
       该程序可以在文件中添加单词。使用 "a+" 模式,程序可以对文件进行读 写操作。首次使用该程序,它将创建wordy 文件,以便把单词存入其中。随后再使用该程序,可以在wordy 文件后面添加单词。虽然 "a+"模式只允许在文件末尾添加内容,但是该模式下可以读整个文件。rewind()函数让程序回到文件开始处,方便while循环打印整个文件的内容。注意,rewind()接受一个文件指针作为参数。
    下面是该程序在 UNIX 环境中的一个运行示例(可执行程序已重命名为
addword ):
$ addaword Enter words to add to the file;
 press the Enter key at the beginning of a line to terminate. 
The fabulous programmer #File contents: 
The fabulous programmer Done! $ addaword Enter words to add to the file; 
press the Enter key at the beginning of a line to terminate. enchanted the large

如你所见, fprintf() fscanf() 的工作方式与 printf() scanf() 类似。但
是,与 putc()不同的是, fprintf() fscanf() 函数都把 FILE 指针作为第 1 个参
数,而不是最后一个参数
fgets() fputs() 函数
fgets() 函数。它的第 1 个参数和 gets() 函数一样,也是表 示储存输入位置的地址(char * 类型); 2 个参数是一个整数,表示待输 入字符串的大小 [1] ;最后一个参数是文件指针,指定待读取的文件。下面 是一个调用该函数的例子: fgets(buf, STLEN, fp);
这里, buf char 类型数组的名称, STLEN 是字符串的大小, fp 是指向 FILE的指针。 fgets()函数读取输入直到第 1 个换行符的后面,或读到文件结尾,或者 读取STLEN-1 个字符(以上面的 fgets() 为例)。然后, fgets()在末尾添加一个空字符使之成为一个字符串。字符串的大小是其字符数加上一个空字符。如果fgets()在读到字符上限之前已读完一整行,它会把表示行结尾的换行符
放在空字符前面。 fgets() 函数在遇到 EOF 时将返回 NULL 值,可以利用这一机 制检查是否到达文件结尾;如果未遇到EOF 则之前返回传给它的地址。
     fputs() 函数接受两个参数:第 1 个是字符串的地址;第 2 个是文件指针。 该函数根据传入地址找到的字符串写入指定的文件中。和 puts() 函数不同, fputs()在打印字符串时不会在其末尾添加换行符。下面是一个调用该函数的 例子:fputs(buf, fp);
   这里, buf 是字符串的地址, fp 用于指定目标文由于fgets() 保留了换行符, fputs() 就不会再添加换行符,它们配合得非常好。
本文含有隐藏内容,请 开通VIP 后查看