关于fprintf和fscanf的详细使⽤⽅法
关于fscanf和fprintf格式化读写⽂件的总结
1. fscanf和fprintf的函数原型
int fscanf(FILE*fp, char * format,...);
int fprintf(FILE*fp, char * format,...);
1. 第⼀个参数:⽂件指针
2. 第⼆个参数:就是格式控制字符串,⽐如说"%d" 表⽰⼗进制输出,"%c"表⽰单个字符值,%s对应类型为char *, 即字符串(char数组)
3. 第三个参数:表⽰参数列表
fprintf、fscanf的读写对象不是终端⽽是磁盘⽂件;
2.fprintf的⽤法
fprintf可以将键盘上输⼊的⼀些信息按照指定的格式录⼊到由指针fp所指向的⽂件⾥⾯
⾸先我们要定义⼀个⽂件指针,格式如下
FILE*fp;
fp =fopen("","w+");
分析: fopen的作⽤是打开⽂件,函数原型:FILE * fopen(const char * path,const char * mode);
注意,后⾯表⽰打开⽅式:
1. r 打开只读⽂件,该⽂件必须存在。
2. r+ 打开可读写的⽂件,该⽂件必须存在。
3. w 打开只写⽂件,若⽂件存在则⽂件长度清为0,即该⽂件内容会消失。若⽂件不存在则建⽴该⽂件。
4. w+ 打开可读写⽂件,若⽂件存在则⽂件长度清为零,即该⽂件内容会消失。若⽂件不存在则建⽴该⽂件。fprintf格式
5. a 以附加的⽅式打开只写⽂件。若⽂件不存在,则会建⽴该⽂件,如果⽂件存在,写⼊的数据会被
加到⽂件尾,即⽂件原先的内容会
被保留。
6. a+ 以附加⽅式打开可读写的⽂件。若⽂件不存在,则会建⽴该⽂件,如果⽂件存在,写⼊的数据会被加到⽂件尾后,即⽂件原先的内
容会被保留。
下⼀步开始将信息录⼊到⽂件:
先看第⼀个例⼦:
int i, j;
fprintf(fp,"%d%d", i, j);
fclose(fp);
那么如果输⼊3 4,那么在新建的⽂件中就会有34(⽆空格)
没有空格,这看起来很令⼈难受,那么我们能不能让输⼊的数字之间有固定的空格数,或者就像我们输⼊时那样的格式呢?我们接着往下看
int i, j;
fprintf(fp,"%d %d", i, j);
fclose(fp);
我们在%d之间加了⼀个空格,这样就可实现在⽂本⾥⾯输⼊的两个数字之间有⼀个空格了,如果%d之间有三个四个五个空格,那么在⽂件⾥⾯数字之间的空格数也是三个四个或五个…
那么,如果我们想让输⼊的两个数字分别位于两⾏该怎么做呢?
fprintf(fp,"%d\n%d", i, j);
没错,就是在两个%d之间加⼊转义字符\n,这样的话,⽐如我们在键盘上敲下了3 4,那么在⽂件⾥它们是这样的:3
4
下⾯,我们再来看⼀个更加多样化的例⼦,深⼊理解fprintf
struct student
{
char name[20];
int num;
char sex[10];
};
int main()
{
student *stu;
stu =new student;
cin>>stu->name>>stu->num>>stu->sex;
FILE*fp;
fp =fopen("信息.txt","w+");
fprintf(fp,"%s %d %s", stu->name, stu->num, stu->sex);
fclose(fp);
return0;
}
3. fscanf的⽤法
读取单个信息
fscanf⽤于从由fp所指向的⽂件中读取信息
例如:
int i;
fscanf(fp,"%d",&i);
cout<<i;
其中,fscanf(fp, “%d”, &i);表⽰从⽂件中读取⼀个⼗进制整数,并把它赋值给i
想要读取空格或者换⾏符的话,只需要把%d换成%c即可
读取⼀⾏信息
⽤fscanf读取⼀整⾏的信息,我们可以这样写
char str[80];
fscanf(fp,"[^\n]", str);
这样⼀来,str数组就保存了整⼀⾏的信息,但是注意,不包括换⾏符!!
要是想读取完⼀整⾏的信息之和直接跳过换⾏符到下⼀⾏,还可以这样写
fscanf(fp,"[^\n]%*c", str);
*表⽰输⼊项读⼊后跳过,所以 %*c 表⽰跳过⼀个字符,在此处即是跳过换⾏符

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。