c/c++ 缓冲输入和非缓冲输入

C语言有缓冲输入和非缓冲输入两种情况,默认缓冲输入,因为有的计算机不支持非缓冲输入。缓冲输入下,通过标准输入(键盘)输入的字符会先存在输入缓冲区里,同时会回显到屏幕上。这样就可以在输入回车(将输入缓冲区清空,并发送到程序的输入队列中,供程序使用)之前,进行输入的修改。但是也支持非缓冲输入,不需要输入回车来将输入发送给程序,而是键盘的任何输入都直接发送到程序的输入队列中。

简言之,缓冲输入的流程是:键盘-》输入缓冲区-》程序中的输入队列 非缓冲输入的流程是: 键盘-》程序中的输入队列

getche()和getch()这两个函数是用于非缓冲输入的,前者提供回显(记:多一个字母,多一个小功能),后者不提供回显。

C函数一般都有返回值,只是有时候不需要获取这个返回值罢了。

printf返回打印的字符的数目,有输出错误则返回负数。

scanf返回读入项目的个数,如果读入失败(比如想读入一个%d,但是用户却输入的'a')会返回0,这时候输入队列头指针不向后移,下次getchar或者scanf还是从刚才的位置开始;读到文件结尾返回EOF(一般在头文件中会有#define EOF -1)。

测试getche和getch的例子如下所示:(在c++中需要加上头文件 #include "conio.h"

#include "stdio.h"
int main(void)
{
    int d;
    char ch;
    printf("Input a character:");
    ch=getchar();
    printf("\nYou input a '%c'\n", ch);
    ch = getche();
    printf("\nYou input a '%c'\n", ch);
    ch=getch();
    printf("\nYou input a '%c'\n", ch);

    while((ch=getchar())!='\n')
    {
        putchar(ch);
    }
    getchar();
    return 0;
}

输入:abcd[enter]jk

输出:a

j

k

bcd //说明输入队列不受getche和getch这些非缓冲函数的影响
原文链接: https://www.cnblogs.com/particle/archive/2012/11/02/2751430.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/67901

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午1:04
下一篇 2023年2月9日 下午1:04

相关推荐