1.fprintf和fscanf
与printf和scanf类似,只是多了第一个参数,第一个参数是一个文件指针。
在fprintf中,这个文件指针指示显示的文本输入到.....(指明输出的目的地)
在fscanf中,这个文件指针指示输入的文本是从...输入的(指明输入的输入源)
无法直接将文件里面的内容读到显示器中或直接将键盘输入的内容输入到文件中,我们需要在程序里面开辟一块区域,用来作为输入输出的桥梁。
- #include<stdio.h>
- #include<stdlib.h>
- #define SIZE 100
- int main(void){
- FILE *fp;//文件指针,当打开模式是a+时,表示既可读又可写
- char wordsBuffer[SIZE];//程序开辟的一块缓存区,用做桥梁
- puts("Enter the words:\n");
- if((fp = fopen("words.txt","a+")) == NULL){
- puts("Can't open word.txt");
- }
- while(gets(wordsBuffer) && wordsBuffer[0] != '\0'){//从键盘中读取一行(不保存换行符,丢弃之)保存到wordsBuffer中
- fprintf(fp,"%s ",wordsBuffer);//从wordsbuffer中写入到fp中
- }
- rewind(fp);//使程序回到开始处
- while(fscanf(fp,"%s ",wordsBuffer)==1){//从文件中读取,遇到空白停止(每次读一个单词)
- puts(wordsBuffer);//读取并自动添加换行符号
- }
- if(fclose(fp) != 0){
- puts("can't close\n");
- exit(-1);
- }
- puts("Done");
- getchar();
- return 0;
- }
2.fgets和fputs
fgets表示读取输入,第一个参数表示读取的内容存在哪里类型是一个char *指针,所以不能使用FILE *!!第二个参数表示读取的字符数,第三个参数表示从哪里读取类型是一个FILE*!!只能读到一个程序缓冲字符数组中,无法直接完成从文件读到键盘或从键盘度读到文件。
fgets会向末尾添加空字符构成字符串,如果换行,还会添加换行符。
fputs表示输入,第一个参数是输入的内容地址,第二个参数是输出到哪里,不会自动添加换行符。
使用这两个函数可以保证安全性