1.putchar
putchar函数表示把字符输出到标准输出上,也就是那个黑黑的窗口里头.但是这个函数有一点奇怪的是,它的输入不是char类型,而是int类型.但是实际上,它的int所能接受的,只有一个char.它的返回类型也是一个int,表示说这一次它到底写出去了几个字符.当然,你想得到,既然每次写一个,正常情况下,它都应该返回1,可是如果出现了某些情况,你的这个输出不能用了,它会返回一个特殊的符号,叫做EOF,意思是end of file,即文件结束,它是我们在C语言里面定义的一个宏.这个宏的值(每个宏都会有一个值)是-1.也就是说它会返回-1表示它不能再输出东西了.正常情况下,我们不需要去检查putchar的输出,putchar的返回.
2.getchar
对应于putchar,我们还有另外一个函数叫做getchar.getchar不需要又有参数,它返回给你它从标准输入读到的一个字符.同样它的返回也是int,它的返回是读到的那个字符,为什么不是char而是int呢?因为它要返回eof来表示说这个时候输入结束了,输入为什么会结束?标准输入为什么会结束,我们先来写个程序看一下:
#include<stdio.h>
int main(int argc,char const *argv[]){
int ch;
while((ch=getchar())!=EOF) {
putchar(ch);
}
printf("EOF\n");
return 0;
}
我们随便输入点东西,敲回车,他会给我们一样的结果.这时如果我们输入eof,没用,再输入-1,也没用.这是一个echo,这是一个应声虫.所有东西都会被他原封不动地输出给我们看.这个时候我们不小心按到了ctrl c,程序结束了,但这不是我们想要的结果,这表明我们只是强制这个程序结束,而并没有正确输入eof,我们并没有让它正确知道我们的输入结束了.正确的做法是在输入结束时按ctrl z(windows),我们得到了eof,表明我们的程序读到了eof的那种状态,我们的getchar给我们返回了eof.顺便说,我们的getchar不是只读入一个吗,为什么我们的程序输入了一大段东西它都没有反应,而在我们按下回车之后再给我们回答呢. 这主要涉及到之前提过的shell和缓冲区的知识(之前也只是简单介绍,有兴趣后面再仔细了解),给一个大致的图(ctrl d是unix的).