#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; }