fprintf、fscanf的读写对象不是终端而是磁盘文件;
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; }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 表示跳过一个字符,在此处即是跳过换行符