48 结合C语言缓冲区谈getchar()、getche()、getch()
来源:互联网 发布:hdmi矩阵说明书 编辑:程序博客网 时间:2024/06/16 07:28
C学习网:链接->C学习网
C训练网:链接->C训练网
《C语言从键盘输入数据》一节讲到了 getchar()、getche()、getch() 函数,它们都用来从控制台获取字符,getchar() 会等待用户按下回车键才开始读取,而 getche()、getch() 会立即读取。这是因为 getchar() 带有缓冲区,用户输入的数据会暂时保存到缓冲区,直到按下回车键才开始读取;而 getche()、getch() 不带缓冲区,只能立即读取。
getchar()函数
getchar() 函数的特点是:如果缓冲区中没有内容,那么等待用户输入;如果有内容,哪怕一个字符,也会直接从缓冲区中读取数据,不会等待用户输入。第一次调用 getchar() 时,会等待用户输入,用户输入的所有字符都被放到标准输入(stdin)缓冲区,直到用户按下回车键为止(回车符也被放入缓冲区)。用户按下回车键,getchar() 函数才开始从缓冲区中读取数据,每次读取一个字符。
在《结合C语言缓冲区谈scanf()函数》的最后一个示例中,我们看到了换行符 \n 引发的奇怪问题,下面我们借助 getchar() 函数将 \n 从缓冲区中清除:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int a=0, b=0;
- scanf("a=%d", &a);
- getchar();
- scanf("b=%d", &b);
- printf("a=%d, b=%d\n", a, b);
- system("pause");
- return 0;
- }
a=100↙
b=100↙
a=100, b=100
执行完第一个 scanf() 后,缓冲区中剩下换行符 \n,我们使用 getchar() 将其读出(并不使用),执行到第二个 scanf() 时,由于缓冲区中没有内容,所以会等待用户输入。
getch()函数
getch 和 getchar 的作用类似,都是从键盘读取一个字符,但是:- getch 不带回显,也就是说,你输入的字符不会在屏幕上显示出来。
- getch 没有缓冲区,也就是说,输入一个字符就立即读取。
【示例①】getch 使用举例。
- #include <stdio.h>
- #include <conio.h>
- int main(){
- char c1, c2;
- c1 = getch();
- printf("%c\n", c1);
- c2 = getch();
- printf("%c\n", c2);
- return 0;
- }
a
b
输入一个字符,getch 会立即获取,不会给你多输入一个字符的机会。并且输入的字符只由 printf 语句显示一次,getch 不会显示。
注意要包含头文件conio.h
,getch 和 getche 都在该头文件中声明。
一般情况下,程序运行结束后要暂停一下才能看到输出结果,否则只能看到一个“黑影”一闪而过,所以要在程序最后添加
system(“PAUSE”);
语句,如果使用C-Free或VC 6.0运行程序,会自动添加该语句。system("PAUSE");
语句会输出一行多余的文字,如果你不会喜欢这样,也可以用getch函数来实现“暂停”的效果。请看下面的代码:
- #include <stdio.h>
- #include <conio.h>
- int main(){
- printf("%s", "getch is great!");
- getch();
- return 0;
- }
getch is great!
后,按任意键程序就会结束。使用 getch 的好处是,不管你按什么键,都不会在屏幕上留下痕迹,使你的界面达到美观效果。
getche()函数
getche()和getch()很相似,也没有缓冲区,区别在于:getch()无回显,getche()有回显。更改示例①的代码:
- #include <stdio.h>
- #include <conio.h>
- int main(){
- char c1, c2;
- c1 = getche();
- printf("%c\n", c1);
- c2 = getche();
- printf("%c\n", c2);
- return 0;
- }
aa
bb
阅读全文
2 0
- 48 结合C语言缓冲区谈getchar()、getche()、getch()
- 结合C语言缓冲区谈getchar()、getche()、getch()
- 结合缓冲区谈谈C语言getchar()、getche()、getch()的区别
- 结合缓冲区谈谈C语言getchar()、getche()、getch()的区别
- C语言getch(),getchar(),getche()区别实例
- C 语言中getch()、getche()和getchar()函数之间的区别以及缓冲区的概念
- c语言中getc(),getch(),getche(),getchar()的区别
- C语言笔记-getch\getche\getchar的区别
- c语言中getch,getche,getchar的区别
- getch getche getchar的区别和缓冲区的概念
- (转)getch getche getchar的区别和缓冲区的概念
- getch getche getchar的区别和缓冲区的概念
- getch getche getchar的区别和缓冲区的概念
- getch getche getchar的区别和缓冲区的概念
- getch getche getchar的区别和缓冲区的概念
- getch getche getchar的区别和缓冲区的概念
- getchar、getch、getche小记
- getch, getche, getchar区别
- vector使用说明
- gitlab邮箱配置 及 163邮箱发件失败
- Mac下安装Redis DeskManager方法
- 一起大数据
- BroadcastReceiver广播接听器的初步认识,动态注册,静态注册(1)
- 48 结合C语言缓冲区谈getchar()、getche()、getch()
- c++中的new与malloc的区别
- 【工具】在TTF字体中提取想要的文字,让字体文件变迷你
- Android使用OkHttp访问自签名证书的Https接口
- Clarifai 识图系统的使用
- C#防止程序多开机制
- 常见
- Unity 开发总结之onValueChanged事件
- mysql主从复制