一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者blog.csdn.net/chuxinchang…
- 掘金LV3用户 juejin.cn/user/138142…
- 阿里云社区专家博主,星级博主,技术博主 developer.aliyun.com/profile/exp…
- 华为云云享专家 bbs.huaweicloud.com/community/m…
8.sscanf 和sprintf
sscanf:
-
第一个参数:字符指针(字符数组的数组名)
-
第二个参数:scanf的格式
-
从一个字符串读格式化数据
sprintf:
- 第一个参数:字符指针(字符数组的数组名)
- 第二个参数:printf的格式
- 写一个格式化的数据到字符串中
fprintf和fscanf时第一个参数时文件指针,现在是字符指针
sprintf和sscanf的运用
struct S
{
int n;
double d;
char name[10];
};
int main()
{
char arr[100] = {0};
struct S s = {100,3.14,"zhangsan"};
struct S tmp = {0};
//把一个格式化的数据转化成字符串放到arr数组中
sprintf(arr,"%d %lf %s",s.n,s.d,s.name);
//打印
printf("%s\n",arr);
//从arr中的字符串提取出一个格式化的数据
sscanf(arr,"%d %lf %s",&(tmp.n),&(tmp.d),tmp.name);
//打印
printf("%d %lf %s\n",tmp.n,tmp.d,tmp.name);
return 0;
}
把结构体变量s的每个成员的数据变成字符串放到数组中->从数组中格式化每个成员的数据->赋值回去给tmp结构体
注意:字符串数据之间要有空格,否则不能格式化提取
9.函数对比
所有输入流:包括文件流+标准输入流(键盘)
所有输出流:包括文件流+标准输出流(屏幕)
scanf:从标准输入流(键盘)读取格式化的数据
fscanf:从所有输入流读取格式化的数据
sscanf:从字符串中读取一个格式化的数据
printf:把格式化的数据输出到标准输入流(屏幕)
fprintf:把格式化的数据输出到所有输出流(屏幕/文件)上
sprintf:把格式化的数据转换成对应的字符串
10.文件的随机读写-
想在哪里开始读就在哪里开始读
fseek-根据文件指针的位置和偏移量定位文件指针
- 第一个参数:文件指针
- 第二个参数:相对于第三个参数的偏移量
- 第三个参数:起始位置,共有三种选项
SEEK_CUR :文件指针现在指向的位置
SEEK_END :文件的末尾
SEEK_SET:文件的起始位置
假设现在文件中存放了abcdef
int main()
{
//打开文件
FILE* pf = fopen("test.txt","r");
if(NULL == pf)
{
perror("fopen");
return -1;
}
//读文件
//随机读写
//如果想要第一次读取就读到字符c
fseek(pf,2,SEEK_SET); //定位文件指针的位置,c相对于字符a,偏移量为2
char ch = fgetc(pf);
printf("%c\n",ch);//c
//读取字符之后,文件指针向后偏移,指向d
//假设现在想读取字符b
fseek(pf,-2,SEEK_CUR);//字符b相对于字符d,偏移量为-2
ch = fgetc(pf);
printf("%c\n",ch);//b
//读完b之后,文件指针向后偏移,指向c
//3.关闭文件
fclose(pf);
pf = NULL;
return 0;
}