标准IO中printf()函数有缓冲区,暂时将数据存放在缓冲区中,待到条件成立才输出。
printf()输出的条件:
1、输出对象是行缓冲,即以'\n'结尾
2、等缓冲区满了才一次性将缓冲区中的东西全部输出
3、以上两个条件都不成立的话,程序执行结束时输出
4、调用scanf()函数前会将缓冲区里的东西清出,即输出
5、使用fflush(stdout)函数主动刷新屏幕输出
6、使用fprintf()函数修改输出对象,输出对象无缓冲区,则直接输出
标准输出(stdout):有缓冲区
标准报错(stderr):没有缓冲区
三个输出函数的介绍:
1、int printf(const char *format, ...); ——>将数据标准输出,有缓冲区
作用:格式化输出数据 printf("%s",buf);
2、int fprintf(FILE *stream, const char *format, ...); —>将数据存放到文件指针中
可以使用来将数据存放到已经打开的文件中
如果文件指针为stdout,则与printf()函数效果一样作用:格式化将数据输出到文件指针中 fprintf(stdout,"%s","hello"); //j将"hello”以%s的格式输出到stdout这个文件指针中
3、int sprintf(char *str, const char *format, ...); ——>将数据存放到内存中
sprintf(buf,"%s","hello"); //buf是一块内存,将"hello"以%s的格式存放到buf这块内存中
三者的区别:
printf输出到屏幕
fprintf输出到第一个参数传入的文件指针
sprintf输出到第一个参数传入的字符串指针
三个输入函数介绍:
1、int scanf(const char *format, ...); ——>从键盘获取输入数据
scanf("%s",buf); //从键盘输入数据,以%s的格式存放到buf这个内存中
int fscanf(FILE *stream, const char *format, ...); ——>从文件指针获取数据
fscanf(stdin,"%s",buf); //从stdin这个文件描述符中获取数据,以%s的格式存放到buf这个内存中
2、int sscanf(const char *str, const char *format, ...); ——>从内存中获取数据
sscanf("hello","%s",buf); //将“hello”这个字符串以%s的格式存放到buf这个内存中
三者的区别:
scanf从键盘获取数据
fscanf从第一个参数(文件指针)获取数据
sscanf从第一个参数(字符串指针)获取数据
拷贝文件例子
//使用fprintf和fscnaf函数拷贝文件
#include <stdio.h>
int main()
{
//第一步:打开文件获取文件描述符
FILE *fd1, *fd2;
fd1 = fopen("./1.txt","r");
fd2 = fopen("./2.txt","w");
//第二步:获取文件大小
fseek(fd1,0,SEEK_END); //将文件指针偏移到末尾
int len = ftell(fd1); //获取文件指针到文件开头的偏移量(即获取文件大小)
fseek(fd1,-len,SEEK_END); //将文件指针偏移到开头,方便后面的读取
//第三步:开辟与文件大小一样大的内存,用来存放获取到的数据
char buf[len];
//第四步:从文件描述符中获取数据,即从第一个文件中获取数据
fscanf(fd1,"%s",buf); //从fd1这个文件描述符获取数据,以%s的格式存放到buf这个内存中
//第五步:将输出到文件描述符中,即存放到第二个文件中
fprintf(fd2,"%s",buf); //从buf中获取数据,以%s的形式输出到fd2这个文件指针中
//第六步:关闭文件
fclose(fd1);
fclose(fd2);
}
本文章属于个人学习笔记,如有出错欢迎指出