关于fprintf和fscanf的详细使用方法

    xiaoxiao2022-07-12  117

    关于fscanf和fprintf格式化读写文件的总结

    1. fscanf和fprintf的函数原型

    int fscanf ( FILE *fp, char * format, ... ); int fprintf ( FILE *fp, char * format, ... ); 第一个参数:文件指针第二个参数:就是格式控制字符串,比如说"%d" 表示十进制输出,"%c"表示单个字符值,%s对应类型为char *, 即字符串(char数组)第三个参数:表示参数列表

    fprintf、fscanf的读写对象不是终端而是磁盘文件;

    2.fprintf的用法

    fprintf可以将键盘上输入的一些信息按照指定的格式录入到由指针fp所指向的文件里面 首先我们要定义一个文件指针,格式如下

    FILE *fp; fp = fopen("xinxi.txt", "w+");

    分析: fopen的作用是打开文件,函数原型:FILE * fopen(const char * path,const char * mode); 注意,后面表示打开方式:

    r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。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); return 0; }

    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 表示跳过一个字符,在此处即是跳过换行符

    最新回复(0)