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