流的格式化输入输出是指:人输入的数据以及最终存储在磁盘上的数据格式不同,所以这些函数实现数据按照指定的格式输入输出,
这里所说的指定的格式包括整形(%d)、浮点型(%f)、字符型(%c)、指针(%p)、字符串(%s)、以及忽略某些位某些位(%*,eg:abcde%d%*2d%d,忽略bc)
一:printf(),scanf()
针对标准输入stdin、标准输出stdout
int c=30
printf("the value of c is:%d",c)
scanf("%s",a)
二:fprintf(),fscanf()
适用于任意流
FILE *fp
fp=fopen("text.txt","r")
fprintf(stdout,"the value of c is:%d",c)=printf("the value of c is:%d",c)
fprintf(fp,"%c",c)——将c的值按照%c的格式输出到标准输出设备
fscanf(stdin,"%s",a)=scanf("%s",a)
fscanf(fp,"%c",c)——从text.txt中读取格式为%c的c的值
fscanf(fp,"%c",&c)——从text.txt中读取格式为%c的字符c(&c表示字符c)
#include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { char a_buf[256],b_buf[256]; FILE *fp; if((fp=fopen("./tmp","w+"))==NULL)//打开或创建一个临时文件 { perror("open error"); exit(EXIT_FAILURE);//XIT_FAILURE 作为exit()的参数,表示没有成功地执行一个程序。 } printf("input a string(<256):\n"); scanf("%s",a_buf); fprintf(fp,"%s",a_buf);//将用户数如到a缓冲区的数据通过fp流输出到临时文件./tmp rewind(fp);//将文件指针返回到文件开始位置 fscanf(fp,"%s",b_buf); printf("%s\n",b_buf); fclose(fp); return 0; }
这里和重定向概念不同fprintf直接往你所定义的文件描述符关联的文件里写数据
而重定向是关闭某个标准输入输出设备文件(文件描述符为1,1,2),而将另一个普通文件的文件描述符设置为0,1,2,但实际上还是用的stdin,stdout和stderr
三:sprintf(),sscanf()
sprintf()主要针对字符串的操作,可控制格式
将整数作为字符串保存sprintf(s,"%d",123)将123作为字符串输出到s
将浮点书作为字符串sprintf(s,"%d",0.123)产生字符串0.123
链接字符串sprintf(s,"%d and %d",aaa,bbb),产生字符串“aaa and bbb”
sscanf()以固定字符串为输入源
char str[512];
sscanf("123456","%4s",str)取指定长度的字符串输入到str