7.1 标准输入/输出
获取一个字符:
int getchar(void);
输入重定向:
<infile
并不包含在 argv 中
prog <infile
通过管道重定向标准输入:
otherprog | prog
输出一个字符:
int putchar(int);
重定向:
prog >输出文件名
prog | anotherprog
使用输入/输出函数前需要包含头文件:
#include <stdio.h>
7.2 格式化输出 - printf 函数
- 返回值为打印的字符数
在%和转换字符中间可能包含的部分:
可以在参数列表中指定打印宽度:
printf("%.*s", max, s);
不同宽度对字符串的作用效果:
- 将格式化的字符串保存到指定位置
7.3 变长参数表
int printf(char *fmt, ...);
- 省略号只能在参数表表尾
中定义了可处理变长参数表的宏定义 - va_list
- va_start
- va_arg
- va_end
猜测: va_start() 根据 fmt 中的格式符 (%) 来初始化 ap 数组的大小, va_arg 将
...
参数保存到 ap 中, va_end() 进行清理. 这里有个疑惑点是没有看到将...
传递给 va_arg(), 它就能解析.
7.4 格式化输入 - scanf 函数
// 返回值, 成功解析的项数
int scanf(char *format, ...)
// 从一个字符串解析
int sscanf(char *string, char *format, arg1, arg2, ...)
格式串的组成:
输入必须和格式串的的匹配:
7.5 文件访问
文件指针:
<stdio.h>
FILE *fp;
FILE *fopen(char *name, char *mode);
读写字节:
int getc(FILE *fp);
int putc(int c, FILE *fp)
- stdin, stdout 是 FILE * 类型
- 调用 fclose() 是必要的, 它将 putc() 的缓存写到文件中
7.6 错误处理 - stderr 和 exit
将 stdout, stderr 分离:
- exit 为每个打开的文件调用 fclose().
- 如果流 fp 中出现错误, ferror() 返回一个非0值
7.7 行输入和行输出
char *fgets(char *line, int maxline, FILE *fp);
int fputs(char *line, FILE *fp);
7.8 其他函数
7.8.1 字符串操作函数
7.8.2 字符类别测试和转换函数
7.8.3 ungetc 函数
// 将字符 c 协会到文件 fp 中
// 每个文件只能接收一个写回字符
int ungetc(int c, FILE *fp)
7.8.4 命令执行函数
应该是调用其他程序.
int system(char* s);
system("date");
7.8.5 存储管理函数
动态分配存储快:
void *malloc(size_t n);
void *calloc(size_t n, size_t size);
int *ip;
ip = (int *) calloc(n, sizeof(int));
释放空间:
// 释放的必须是由 malloc/calloc 分配的空间
free(p);
7.8.6 数学函数
7.8.7 随机数发生器函数
rand():
- 0~RAND_MAX (
)
生成大于等于0, 但小于1的浮点数:
#define frand() ((double) rand() / (RAND_MAX+1.0))
设置种子:
srand(unsigned)