13. 标准输入输出库
- 13.1 这样的代码有什么问题?
char c;
while((c = getchar()) != EOF) ...
- 13.2 我有个读取直到 EOF 的简单程序, 但是我如何才能在键盘上输入那个
``EOF" 呢?
- 13.3 为什么这些代码
while(!feof(infp)) {
fgets(buf, MAXLINE, infp);
fputs(buf, outfp);
}
把最后一行复制了两遍?
- 13.4 我的程序的屏幕提示和中间输出有时显示在屏幕上, 尤其是当我用管道向
另一个程序输出的时候。
- 13.5 我怎样不等待回车键一次输入一个字符?
- 13.6 我如何在 printf 的格式串中输出一个 '%'?
我试过 \%, 但是不行。
- 13.7 有人告诉我在 printf 中使用 %lf 不正确。那么, 如果 scanf()
需要 %lf, 怎么可以用在 printf() 中用 %f 输出双精度数呢?
- 13.8 对于 size_t 那样的类型定义, 当我不知道它到底是 long
还是其它类型的时候, 我应该使用什么样的 printf 格式呢?
- 13.9 我如何用 printf 实现可变的域宽度?就是说, 我想在运行时确定宽度
而不是使用 %8d?
- 13.10 如何输出在千位上用逗号隔开的数字?金额数字呢?
- 13.11 为什么 scanf("%d", i) 调用不行?
- 13.12 为什么
char s[30];
scanf("%s", s);
不用 & 也可以?
- 13.13 为什么这些代码
double d;
scanf("%f", &d);
不行?
- 13.14 怎样在 scanf() 格式串中指定可变的宽度?
- 13.15 当我用 ``%d\n" 调用 scanf 从键盘读取数字
的时候, 好像要多输入一行函数才返回。
- 13.16 我用 scanf %d 读取一个数字, 然后再用 gets() 读取字符串, 但是
编译器好像跳过了 gets() 调用!
- 13.17 我发现如果坚持检查返回值以确保用户输入的是我期待的数值,
则 scanf() 的使用会安全很多, 但有的时候好像会陷入无限循环。
- 13.18 为什么大家都说不要使用 scanf()?那我该用什么来代替呢?
- 13.19 我怎样才知道对于任意的 sprintf 调用需要多大的目标缓冲区?
怎样才能避免 sprintf() 目标缓冲区溢出?
- 13.20 为什么大家都说不要使用 gets()?
- 13.21 为什么调用 printf() 之后 errno 内有 ENOTTY?
- 13.22 fgetops/fsetops 和 ftell/fseek 之间有什么区别? fgetops()
和 fsetops() 到底有什么用处?
- 13.23 如何清除多余的输入, 以防止在下一个提示符下读入?
fflush(stdin) 可以吗?
- 13.24 既然 fflush() 不能, 那么怎样才能清除输入呢?
- 13.25 对某些路径文件名调用 fopen() 总是失败。
- 13.26 我想用 ``r+" 打开一个文件, 读出一个字符串, 修改之后再写入,
从而就地更新一个文件。可是这样不行。
- 13.27 怎样在程序里把 stdin 或 stdout 重定向到文件?
- 13.28 一旦使用 freopen() 之后, 怎样才能恢复原来的 stdout
(或 stdin)?
- 13.29 怎样同时向两个地方输出, 如同时输出到屏幕和文件?
- 13.30 怎样正确的读取二进制文件?我有时看到 0x0a 和 0x0d 混淆了,
而且如果数据中包含 0x1a 的话, 我好像会提前遇到 EOF。
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)