getchar、getch、getche小结 一、getchar()
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,即如果stdin有数据的话不用输入它就直接读取。getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和tab)。getchar()以Enter/回车结束输入,不会舍弃最后的回车符。getchar()返回类型为int型,返回值为用户输入的ASCLL码,出错返回-1。
void main()
{
char c;
while ((c=getchar())!='\n')
printf("%c",c);
printf("/n/n");
}
在这里我补充两个函数scanf()和gets()
a、scanf()
scanf()以空格、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区)。
b、gets()
gets()以Enter结束输入(空格不结束),接收空格,会舍弃最后的回车符。 下面分析下这两者之间的区别:
1.scanf()
所在头文件:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",字符数组名或指针);
2.gets()
所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf()以空格、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区)。
gets()以Enter结束输入(空格不结束),接收空格,会舍弃最后的回车符。
2.相同点:
字符串接受结束后自动加'\0'。
#include <stdio.h>
void main()
{
char ch1[10],ch2[10];
scanf("%s",ch1);
gets(ch2);
}
依次键入tan空格love回车,tan空格love回车,则ch1="tan\0",ch2="tanlove\0"。
输入输出缓冲区的概念-在数据源与数据目标中间放置一个保存完整数据内容的区域,那就是 “缓冲区”。这样的话, 数据源可以不考虑数据目标正在处理哪部分数据,只要把数据输出到缓冲区就可以了,数据目标也可以不考虑数据源的发送频率,只是从缓冲区中依次取出下一个数据。从而保证了数据发送的完整性,同时也提高了程序的效率。
getch、getche以及getchar的区别
一、头文件的不同
getch、getche是在conio.h头文件中,getchar是在stdio.h文件中的库函数。
二、是否使用缓冲区
getch(),getche()没有用到缓冲区。getchar()用到了。
三、它们分别的作用
getch()实际是一个输入命令,作用是从键盘接收一个字符,而且并不把这个字符显示出来,就是说,你按了一个键后它并不在屏幕上显示你按的什么,而继续运行后面的代码,所以我们在C++中可以用它来实现“按任意键继续”的效果,即程序中遇到getch();这行语句,它就会把程序暂停下来,等你按任意键,它接收了这个字符键后再继续执行后面的代码。
getch和getche很相似,它们之间的区别在于getch()无返回显示,getche()有返回显示。这是它们之间的唯一区别。
void main()
{
char ch;
for(int i=0;i<5;i++)
{
ch=getch();
}
}
上面程序中我们会发现按 5次任意键程序就结束了,但屏幕上什么都没有显示。
void main()
{
char ch;
for(int i=0;i<5;i++)
{
ch=getche();
}
}
程序在执行 ch=getche();这条语句的时候就把我们输入的值返回显示在屏幕上,有无回显就是它们的唯一区别。
getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。
四、读取数据的来源
getch、getche这两个函数都是从键盘中读入数据,getchar是从缓冲区去读入数据。