我们先来逐个介绍一下:流这个概念,流就是外部设备和程序之间的桥梁,作为程序员我们不需要知道流是怎么将数据输入,输出到外部设备的,但是我们要知道流怎么建立和程序的联系。
标准流有:
标准输入流:stdin
标准输出流:stdout
标准错误流:stderr
类型都是FILE*
除了以上的标准流以外,还有文件流,其实就是我们的文件信息区,类型也是FILE*
下面的一些函数就是运用流来调用的,有标准流,文件流,和所有流。
printf:格式化的输出函数(标准流)
返回输出数据字符长度。
scanf:格式化的输入函数(标准流)
返回输入数据的个数。
fprintf:格式化的输出函数(所有流)
举例1:标准流下
int main()
{
int a = 10;
fprintf(stdout, "%d", a);
//stdout标准输出流,也就是屏幕
}
运行结果:
举例2:文件流下
int main()
{
//打开文件
FILE* pf = fopen("test.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//使用文件
int a = 0;
char b = 'z';
fprintf(pf, "%d %c", a, b);
//fprintf输出,从程序输出。
//pf文件流从程序输入到文件。
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
运行结果:
返回:输出到目的地的字符数
fscanf:格式化的输入函数(所有流)
举例:标准流
int main()
{
int a = 0;
char b = 0;
fscanf(stdin, "%d %c", &a, &b);
//stdin标准输入流 也就是键盘。
//检验
printf("输出是:%d %c", a, b);
return 0;
}
运行结果:
举例2:文件流
int main()
{
//打开文件
FILE* pf = fopen("test.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//使用文件
int a = 0;
int b = 0;
//从文件里面输入
fscanf(pf, "%d %c", &a, &b);
//输出检验
printf("输出是:%d %c", a, b);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
运行结果:
sscanf:把一个字符串转化为格式化数据
注意:不是针对流的
举例:
int main()
{
char str[100] = "20 z zhangxuefeng";
int a = 0;
char b = 0;
char arr[100];
sscanf(str, "%d %c %s", &a, &b, arr);
//检验
printf("%d %c %s", a, b, arr);
return 0;
}
运行结果:
sprintf:把一个格式化的数据转化为一个字符串
举例:
int main()
{
char str[100] = { 0 };
int a = 20;
char b = 'z';
char arr[100]="zhangxuefeng";
sprintf(str, "%d %c %s", a, b, arr);
//检验
printf("%s", str);
return 0;
}
运行结果:
综合对比:
返回值:printf,fprintf,sprintf 的返回值都是一样的,就输出数据所占的字符长度。
scanf,sscanf,fscanf 的返回值都是输入数据的个数。
参数:最后的格式化数据都是一样的。
fprintf和fscanf 第一个参数是流。
sprintf和sscanf的第一个参数是字符串类型,或者字符指针类型。