1.格式化输入输出
- printf: %[flags] [width] [.prec] [hlL]type
- scanf: %[flag]type
printf参数说明:
flag | 含义 |
- | 左对齐 |
+ | 在前面放置 + 或 - |
(space) | 正数留空 |
0 | 0填充 |
width或prec | 含义 |
number | 最小字符数 |
* | 下一个参数是字符数 |
.number | 小数点后的位数 |
.* | 下一个参数是小数点后的位数 |
类型修饰 | 含义 |
hh | 单个字节 |
h | short |
l | long |
ll | long long |
L | long double |
type | 作用 | type | 作用 |
i 或 d | 整数型int | g | 浮点型float |
u | 无符号整型unsigned int | G | 浮点型float |
o | 八进制 | a 或 A | 十六进制浮点 |
x | 十六进制 | c | 字符型char |
X | 字母大写的十六进制 | s | 字符串 |
f 或 F | 浮点型float, 6 | p | 指针 |
e 或 E | 指数 | n | 读入/写出的个数 |
scanf参数说明:
flag | 含义 | flag | 含义 |
* | 跳过 | l | long, double |
纯数字 | 最大字符数 | ll | long long |
hh | 字符型char | L | long double |
h | 短整型short |
type | 作用 | type | 作用 |
d | 整数型int | s | 字符串(单词) |
i | 整数,可能为十六进制或八进制 | […] | 所允许的字符 |
u | 无符号整型unsigned int | p | 指针 |
o | 八进制 | a,e,f,g | 浮点型float |
x | 十六进制 | c | 字符型char |
printf和scanf的返回值:
printf: 输出的字符数
scanf: 返回读入的项目数
2.文件输入输出
1.使用<和>做输出重定向
在运行时, 附加< xx.in,可以指定xx.in作为程序的输入, 附加> xxx.out, 可以将程序运行的结果输出至xxx.out中
2.FILE
FILE* fopen(const char * restrict path, const char * restrict mode);
int fclose(FILE *stream);
fscanf(FILE *, …);
fprintf(FILE *, …);
打开文件的标准代码
fopen"~" | 对应操作 |
r | 打开只读 |
r+ | 打开读写,从文件头开始 |
w | 打开只写,如果不存在则新建,如果存在则清空 |
w+ | 打开读写,如果不存在则新建,如果存在则清空 |
a | 打开,追加如果不存在则新建,如果存在则从文件尾开始 |
(再附加)x | 只新建,如果文件已存在则不能打开 |
3.二进制文件
- 所有的文件最终都是二进制的
- 二进制文件是需要专门的程序来读写的文件
- 文本的输入输出是格式化,可能经过转码
程序需要通过第三方库读写文件,很少直接读取二进制文件了
二进制读写
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
注意:FILE指针是最后一个参数,返回的是成功读写后的字节数
nitems ?
- 二进制文件的读写一般都是通过对一个结构变量的操作进行的
- nitems的作用是用来声明这种词读写几个结构变量
在文件中定位
long ftell(FILE *stream); //得到文件指针的偏移量并返回,需要用变量接收!
int fseek(FILE *stream, long offset, int whence);//将文件指针移动到指定位置,offset为偏移字节数,开头则为 0L
SEEK_SET: 从头开始
SEEK_CUR: 从当前位置开始
SEEK_END: 从尾开始
可移植性
在int为32位的机器上写出的数据文件无法直接在int为64位的机器上正确读出
- 一个较好地解决方案是放弃使用int类型,而是使用typedef声明一个具有具体大小的类型
- 更好的方案是使用文本,可以解决跨平台数据读写问题
4.一个实例:学生数据储存系统(开源)
项目截图
1.初始运行界面
2.添加学生功能
3.保存学生功能
5.退出
6.再次进入读取数据
7.打印数据
转载请注明出处,本代码开源,地址:https://github.com/Heartfirey/Student-Management-System-By-C
新人求收藏点赞~谢谢