总结
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;
}











