格式化输入输出函数
1.fscanf和fprintf
fscanf: Read formatted data from stream
fprintf: Write formatted data to stream
int main()
{
char str[80];
float f;
// 打开文件 打开绝对路径,注意转义字符!
FILE* pFile = fopen("F:\\test.txt", "w+");
// 打开是否正常
if (!pFile)
{
perror("fopen:");
return 1;
}
// 文件操作
// 格式化写到文件中
fprintf(pFile, "%f %s", 3.1416, "PI");
// 让文件指针的位置回到文件的起始位置
rewind(pFile);
// 从文件中格式化读到指定程序变量中
fscanf(pFile, "%f", &f);
fscanf(pFile, "%s", str);
// 文件关闭
fclose(pFile);
printf("I have read: %f and %s \n", f, str);
pFile = NULL;
return 0;
}
结果:
小结
- 这两个函数都是顺序读写,即对文件读或写操作后,文件指针会向后移动。所以利用rewind函数将文件指针回到起始位置。
- fscanf和fprintf的参数列表相比于scanf和printf只是多了FILE * stream参数。
- fscanf是格式化从输入流中输入数据,fprintf是格式化向输出流中输出数据。
2.sscanf和sprintf
sscanf: Read formatted data from string
sprintf: Write formatted data to string
int main()
{
char ch1[] = "kk's 12 years old";
char ch2[20];
char ch3[30];
int i;
sscanf(ch1, "%s %d", ch2, &i);// 从字符串中读到格式化的数据
printf("%s %d\n", ch2, i);
sprintf(ch3, "%s %d",ch1, i);// 格式化往字符串中转,转为字符串
printf("%s", ch3);
return 0;
}
结果:
小结
- 这两个函数都是针对字符串的。
- sscanf和sprintf的参数列表相比于scanf和printf只是多了char * str参数。
- sscanf是从字符串中格式化输入数据,sprintf是格式化向字符串中输出数据。
3.scanf和printf
Read formatted data from stdin
Print formatted data to stdout
4.总结
scanf这种的,就是从那读(输入)到那
- scanf是从stdin读到程序变量中
- fscanf是从文件/stdin读到程序变量中
- sscanf是从字符串读到程序变量中
printf这种的,就是把那写(输出)到那
- printf是把程序变量写到stdout
- fprintf是把程序变量写到文件/stdout
- sprintf是把程序变量写到字符串