读写定位及格式化输出
1. 读写定位函数
int fseek(FILE *stream, long offset, int whence); 设置文件读写位置
long ftell(FILE *stream); 获取文件读写位置
void rewind(FILE *stream); 回到文件开头
long ftell(FILE *stream); 获取文件读写位置
void rewind(FILE *stream); 回到文件开头
可处理文件长度大于long
int fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);
IOS C标准,支持跨平台
int fgetpos(FILE *stream, fpos_t *pos); 设置文件读写位置
int fsetpos(FILE *stream, fpos_t *pos); 获取文件读写位位置
2. 格式化输入输出函数
格式化输入:
#include <stdio.h>
int scanf(const char *format, ...); //从标准IO中输入
int fscanf(FILE *stream, const char *format, ...); //从文件中输入
int sscanf(const char *str, const char *format, ...); //从字符串
#include <stdarg.h>
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
int scanf(const char *format, ...); //从标准IO中输入
int fscanf(FILE *stream, const char *format, ...); //从文件中输入
int sscanf(const char *str, const char *format, ...); //从字符串
#include <stdarg.h>
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
int vfscanf(FILE *stream, const char *format, va_list ap);
(2)格式化输出
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
3. 测试用例
#include <stdio.h>
#include "scanfTest.h"
void scanTest()
{
int iD1 = 0, iD2 = 0, iD3 = 0;
scanf("%d", &iD1, &iD2, &iD3);
printf("data: %d,%d,%d\n", iD1, iD2, iD3);
char szBuf[100] = {0};
sscanf("123456", "%s", szBuf);
printf("data: %s\n", szBuf);
}
#include "scanfTest.h"
void scanTest()
{
int iD1 = 0, iD2 = 0, iD3 = 0;
scanf("%d", &iD1, &iD2, &iD3);
printf("data: %d,%d,%d\n", iD1, iD2, iD3);
char szBuf[100] = {0};
sscanf("123456", "%s", szBuf);
printf("data: %s\n", szBuf);
}
输出:
1
data: 1,0,0
data: 123456
data: 1,0,0
data: 123456
总结:
(1)scanf一次只能输入一个
(2)sscanf 能做到的,sprintf能做的更好