#include<stdio.h>
//scanf fscanf sscanf的区别
//scanf 针对标准输入的格式化的输入语句--stdin
//fscanf 针对所有输入的格式化的输入语句--stdin/文件
sscanf 从一个字符串读取一个格式化的数据
//使用形式: sscanf(存放在新的字符串的名字,"%s %d %d",&(原来结构体的存储方式));
// printf("%s",字符串名字); 用新的字符串字符串打印方式
//printf fprintf sprintf的区别
//printf 针对标准输出的格式化的输出语句--stdin
//fprintf 针所有准输出的格式化的输出语句--stdin/文件
//sprintf 把一个格式化的结构体变为字符串
//使用形式: sprintf(存放在新的字符串的名字, "%s %d %f", s.arr, s.age, s.f);
// printf("%s",字符串名字); 用结构体形式打印
//实例:
struct S
{
char arr[10];
int age;
float f;
};
int main()
{
struct S s = { "hello",20,5.5f};
struct S tmp = { 0};
char buf[100] = { 0 };
sprintf(buf, "%s %d %f", s.arr, s.age, s.f);//sprintf 把一个格式化的结构体变为字符串
printf("%s\n", buf);//字符串形式打印
sscanf(buf, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.f));
//sscanf 从buf字符串中还原出一个结构体数据
//tmp.arr不加地址,因为数组名本身就是地址,tmp.age tmp.f都需要加&
printf(buf, " % s % d % f", tmp.arr, tmp.age, tmp.f);//用结构体形式打印
return 0;
}
//1.文件的随机读写---fseek 根据文件指针的位置和偏移量来定位文件指针
//2.ftell 返回文件指针相对于起始位置的偏移量
//3.让文件指针回到起始位置rewind
int main()
{
//打开文件
FILE *pf=fopen("test.dat", "r");//r--读的形式
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读取文件
//1.按顺序读---若文件里面有abcdef
int ch = fgetc(pf);//用fgetc读取一个字节--如a
printf("%c\n", ch);
ch = fgetc(pf);//用fgetc读取一个字节--如b
printf("%c\n", ch);
ch = fgetc(pf);//用fgetc读取一个字节--如c
printf("%c\n", ch);
//2.定义指针到某一位置读--fseek(针对某一个流/文件,偏移量,起始位置);---
//起始位置有三个,当前指针位置SEEK_CUR,结束位置SEEK_END,开始位置SEEK_SET
fseek(pf, -1, SEEK_CUR);
printf("%c\n", ch);//打印结果为b 当前位置为c,-1是向前偏移一个位置
int ret = ftell(pf);
printf("%d\n", ret);//打印结果为2, 因为b相对于原来偏移为2
//3.让文件指针回到起始位置rewind
rewind(pf);
ch = fgetc(pf);
printf("%c\n", ch);//0
//关闭文件
fclose (pf);
pf = NULL;
return 0;
}