【文件复制】
C语言标准库提供的输入/输出模型非常简单。无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理。文本流是由多行字符构成的字符序列,而每行字符则由 0个或多个字符组成,行末是一个换行符。标准库负责使每个输入/输出流都能够遵守这一模型。
你对于这段话不太理解,没关系,有个印象就可以了。
C语言标准库提供了一次读/写一个字符的函数,其中最简单的是 getchar 和 putchar 两个函数。每次调用时,getchar 函数从文本流中读入下一个输入字符,并将其作为结果值返回。
下面程序的功能是从标准输入中读入一个字符,然后输出这个字符。
1 2 3 4 | 【打印华氏温度与摄氏温度对照表】 【文件复制】 【统计字符】 【行计数】 |
【文件复制】
借助于 getchar 与 putchar 函数,可以在不了解其它输入/输出知识的情况下编写出数量惊人的有用的代码。最简单的例子就是把输入一次一个字符地复制到输出。
1 2 3 4 5 6 7 8 9 10 11 | 0 -17.8 20 -6.7 40 4.4 60 15.6 80 26.7 100 37.8 120 48.9 140 60.0 160 71.1 180 82.2 200 93.3 |
翻译成 C 语言,就是
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int f; f = 0; 当 f 小于等于 200 时 { 计算华氏温度 c 并根据要求输出; f 递增 20; /* 递增就是在原来的基础上增加20 */ } return 0; } |
我们先来看看怎么样运行这个程序。编译并运行这个程序后,你可以随意输入一些字符,换行,在输入,在换行,始终不结束。
为什么会这样呢? 因为这个程序还没有遇到文件结束。 你在换行后,输入 Ctrl + Z,这是这个程序才结束。
在 Windows 系统中,使用 Ctrl + Z 表示标准输入结束,也就是 EOF ( End Of File)标志。
赋值语句可以合并到条件判断中,合并过程如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int f; f = 0; while (f <= 200) { printf("%3d %6.1f\n", f, (5.0/9.0)*(f-32)); f = f + 20; } return 0; } |
于是可以得到下面非常精炼的程序
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { int f; for (f = 0; f <= 200; f = f + 20) { printf("%3d %6.1f\n", f, (5.0/9.0)*(f-32)); } } |
这段程序翻译成中文,就是
1 2 3 | 移动初始化部分到 整个 while 语句的前面; 增加步长部分移到 while 语句执行部分的最后; for 改为 while,并移除 ()中的分号; |