总结
1.scanf/printf 是标准输入输出流函数(键盘、屏幕)。
 2.fscanf/fprintf 适用于所有输入输出流(文件、键盘、屏幕…)。
 3.sscanf/sprintf 是把格式化的数据写入某个字符串中,从某个字符串中读取格式化的数据。
第一组:scanf/printf
scanf/printf是格式化标准输入输出函数,scanf默认输入流是 stdin 键盘输入。printf默认输出流是stdout屏幕输出。
#include <stdio.h>
int main() {
	int num = 0;
	scanf("%d" , &num);
	printf("%d" , num);
	return 0;
}

第二组:fscanf/fprintf
fscanf/fprintf是格式化输入输出函数,fscanf/fprintf 适用于所有输入输出流。
文件流:
#include <stdio.h>
struct Data {
	char name[20];
	int age;
};
int main() {
	struct Data data = { "孙悟空" , 18 };
	FILE* fp = fopen("D:/test.txt", "w+");
	if (fp == NULL) {
		perror("fopen:");
		exit(-1);
	}
	fprintf(fp , "%s %d" , data.name , data.age);
	fclose(fp);
	fp = NULL;
	fp = fopen("D:/test.txt", "r");
	if (fp == NULL) {
		perror("fopen:");
		exit(-1);
	}
	struct Data temp = { 0 };
	fscanf(fp , "%s %d" , temp.name , &temp.age);
	printf("%s %d" , temp.name , temp.age);
	fclose(fp);
	fp = NULL;
	return 0;
}
注:fscanf(stdin , "%d" , &num); == scanf("%d" , &num); fprintf(stdout , "%d" , num); == printf("%d" , num);
第三组:sscanf/sprintf
sprintf是把格式化的数据写入某个字符串中。
 sscanf 从某个字符串中读取格式化的数据。
#include <stdio.h>
typedef struct Data {
	char name[20];
	int age;
	double score;
}Data;
int main() {
	Data data = { "孙悟空" , 18 , 20.6 };
	char buffer[256] = { 0 };
	sprintf(buffer , "%s %d %lf" , data.name , data.age , data.score);
	printf("字符串数据:%s\n" , buffer);
	Data temp = { 0 };
	sscanf(buffer , "%s %d %lf", temp.name, &temp.age, &temp.score);
	printf("格式化数据:%s %d %lf", temp.name, temp.age, temp.score);
	return 0;
}











