天天看点

getchar、getch、getche

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是从缓冲区去读入数据。