首先,用getchar()函数的时候有两大特征:
- 以回车符’\n’结束字符的输入 输入的字符
- (包括回车符)都放在输入缓冲区中
这就需要讲一讲行缓冲(Line-buffer)输入方式:
1、将输入字符先放入输入缓冲队列中,再从缓冲队列读取字符
2、直到键入回车符或文件结束符EOF时,程序才认为输入结束
3、一行输入结束,getchar()才开始从输入缓冲队列读取字符, 前面函数没读走的数据仍在缓冲队列中,将被下一个函数(getchar())读取
为什么getchar()要读到一个回车符或文件结束符EOF才 进行一次处理操作呢?
或者说为什么getchar()以行(而非字符)为单位读取字符呢?
- 实际是按文件的方式读取字符
- 文件一般都是以行为单位的
还有一个需要注意的问题:
有时getchar()也可能返回负值 :
若在Unix/Linux下遇到组合键Ctrl+D(Windows下为Ctrl+Z) ,则返回EOF(一般定义为-1)
因为getchar()函数返回终端输入的第一个字符 ASCII码值(通常非负),所以通常这样定义:
int ch;
ch = getchar();