刚开始学C,在《C和指针》上经常看到如下关于getchar()和EOF的语句,所以在百度文库搜到一份文档,稍作整理作为自己的学习笔记。
printf("Input your data:\n");
char ch;
while((ch=getchar())!=EOF)
{
putchar(ch);
}
1、getchar()通常返回为字符,但基本是以返回负值来结束输入,如EOF;
getchar()通常返回字符,这些字符的ASCII值都是非负的,所以上面的代码就可能会出现问题。ch的类型是char,所以getchar()不能返回EOF(在某些函数库中定义为-1)给ch。因此正确的写法应该是:
int ch;
ch=getchar();
如果类型是ch,就有两种结果:
1)某些合法的输入字符在被“截断”后使得ch取值与EOF相同,程序将在文件复制的工程中中断;
2)ch根本娶不到EOF这个值,程序陷入死循环;
2、getchar()以行为单位进行存取;
输入hello world 然后回车,程序就会执行putchar(ch),将hello world和一个回车输出。然后光标会自动换行等待下次输入,直到遇到换行符,系统将之前的输入输出到终端。那么getchar()怎么才能停止等待输入呢?
我们用getchar()在控制台取字符的时候,它首先要把所有取得的东西按照顺序放在内存的某个临时的地方,但我们输入回车时塔就会把之前的输入按顺序取出,当取到回车时就是上次输入的结束。在程序中不论我们调用多少次getchar(),它都会放在一个地方,并且不断增加。只有取到换行符才表示这个地方空了,下次getchar()时控制台才会停顿等待输入。
经验证,只能在getchar()提示新一次输入时,输入Ctrl+Z(Windows下的EOF)加上回车才能结束输入。