本文首发于个人博客:http://blog.92yu.win,欢迎大家关注。
基本定义
getchar
int getchar(void)
{
static char buf[BUFSIZ];
static char* bb=buf;
static int n=0;
if(n==0)
{
n=read(0,buf,BUFSIZ);
bb=buf;
}
return(--n>=0)?(unsigned char)*bb++:EOF;
}
该函数声明在
getch
getch功能基本上与getchar相同。区别在于getch不等待回车,只要用户按一个键,就会立刻返回。
getch返回值也是ASCII码值,出错返回-1。
注意:
getch函数是非缓冲输入函数,即不能用getch来接收缓冲区已存在的字符。
通常getch用于程序调试中,在关键位置显示有关结果以查看,然后用getch函数暂停程序运行,按下任一按键继续程序运行。
getche
与上面两个函数功能类似,都是接收一个字符,返回值同样是ASCII码值。
不同的是,此函数在输入后立刻从控制台读取字符,不以回车为结束标识。
scanf
scanf这个函数比较特别
scanf输入字符串,整型,实型等数据的判断方式都一样,回车,空格,tab键都会被认为是输入的结束。当然字符的话,一个字符就是结束了。
回车、空格等都有对应的ASCII码,所以用scanf输入字符时要小心这些东西被当成字符输进去,而输入字符串和整型、实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。
如果scanf输入的不是字符,那么分隔符为回车,空格、tab键时,两个数据之间的分隔符只是起区别两个数据的作用,把分隔好的两个数据分别赋值到各自定义好的变量或数组中去,两个数据之间的分隔符被从缓冲区读出但是不起任何作用,当然最后一个’\n ‘会被留在缓冲区内,除非用getchar();或scanf(“%c”,&c);把它读出来。
回车是一定要有的,不管getchar还是scanf只要是通过缓冲区输入数据的函数都是等待回车键 ‘\n ‘出现才进入缓冲区的。
程序举例
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc)
{
int a, c;
printf("please input a char: \n");
a = getchar();
if (EOF != a) {
printf("aaa == %c \n", a);
}
while ((c = getchar()) != '\n' ) {
if (EOF == a) {
break;
}
printf("ccc == %d \n", c);
}
printf("press any key to continue: \n");
getchar();
//此处 getchar()在这里作用等同于 system("pause");
}
结果为