编写程序,把输入一次一个字符地复制到输出:
/* inout.c */
#include <stdio.h>
int main() {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
getchar
和 putchar
是标准库提供的一次读 / 写一个字符的函数。getchar 函数从文本流中(通常是从键盘输入)读入下一个输入字符,并将其作为结果值返回。putchar 将变量的内容以字符形式打印出来(通常是显示在屏幕上)。
字符在机器内部是以为位模式存储的,char 类型专门用于存储字符型数据,这里不把 c 声明为 char ,而是声明为 int ,是因为 c 必须足够大以存放 getchar 函数返回的任何值。
EOF 是文件结束符(end of file),定义在头文件 <stdio.h> 中,是一个整型数。当没有输入的时候,getchar 就会返回一个 EOF,while 循环语句就会终止执行。
while ((c = getchar()) != EOF) {
/* ... */
}
/* 等价于 */
c = getchar();
while(c != EOF) {
/* ... */
c = getchar();
}
对于 while 的条件判断语句,由于不等于运算符 !=
的优先级高于赋值运算符 =
,所以 (c = getchar())
的圆括号不可省略。
c = getchar() != EOF;
/* 上面的语句等价于 : */
c = (getchar() != EOF);
对上面程序进行编译运行:
- 第一行 Hello, world! 是从键盘输入的文本,回车结束当前文本输入,由 putchar 逐个字符打出第二行:
Hello, world!
Hello, world!
- 第一个 Hello, world! 是从键盘输入的文本,键入 Ctrl + d 结束当前文本输入,由 putchar 逐个字符打印出第二个 *Hello, world!":
Hello, world!Hello, world!
一个习题:
编写程序, 打印 EOF 的值,并验证表达式 getchar() != EOF 的值是 0 还是 1。
// ex.c
#include <stdio.h>
int main() {
printf("%d\n", EOF);
printf("%d", getchar() != EOF);
return 0;
}
编译运行结果:
- 输入 'h' :
-1
h
1
- 输入 ’Ctrl + d' :
-1
0
- 输入换行符
-1
1
网友评论