问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问:关于C语言中getc(stdin) 读取键盘缓冲区的问题?

发布网友 发布时间:2022-10-23 03:58

我来回答

3个回答

热心网友 时间:2024-01-06 18:48

getc(stdin)每次只能从缓冲区读取一个 字符,但是遇到回车符就结束了。连续从缓冲区读取循环此段代码。同样以回车结束。#include<stdio.h>void main(void)
{while(1){
char a;
a=getc(stdin);
printf("%c",a);}} 这是编译器内部定义的函数,他在头文件里的定义可以再函数名上击右键选getc定义查看,但是内部实现看不到。下面是截取了stdio.h里的一段定义。
_CRTIMP int __cdecl _flushall(void);
_CRTIMP FILE * __cdecl fopen(const char *, const char *);
_CRTIMP int __cdecl fprintf(FILE *, const char *, ...);
_CRTIMP int __cdecl fputc(int, FILE *);
_CRTIMP int __cdecl _fputchar(int);
_CRTIMP int __cdecl fputs(const char *, FILE *);
_CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);
_CRTIMP FILE * __cdecl freopen(const char *, const char *, FILE *);
_CRTIMP int __cdecl fscanf(FILE *, const char *, ...);
_CRTIMP int __cdecl fsetpos(FILE *, const fpos_t *);
_CRTIMP int __cdecl fseek(FILE *, long, int);
_CRTIMP long __cdecl ftell(FILE *);
_CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);
_CRTIMP int __cdecl getc(FILE *);//////////////////////////这里定义了getc();
_CRTIMP int __cdecl getchar(void);
getc()中的参数FILE定义:#ifndef _FILE_DEFINED
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

热心网友 时间:2024-01-06 18:48

如果是在操作系统上运行,从键盘缓冲区到文件,基本是操作系统干的
所以,getch只是从文件里把字符读出来,c运行库也会通过FILE 结构管理文件的信息,包括里面的缓冲区,所以getch就是从FILE结构体的缓冲区里面读。 原理基本就是你写的那样。

热心网友 时间:2024-01-06 18:49

这个过程很复杂,新人最好先不要深入这个底层的知识。我简单的解释一下这个过程。getc函数接受参数fp是一个文件的流,内含一个指针是用来指向内存里的缓存,读一个字符以后,指针+1然后继续读next。如果以后你学的比较熟练了,可以仔细阅读stdio..h的源代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
香港电影有一部是两个女人能变蟒蛇的电影 期房需先交哪些钱 期房交定金之后多久交首付可以延期吗 期房定金后多久交首付可延期? 为什么考驾照就是紧张过不去,为什么 考驾照的考场是什么样的 moll是什么单位 法定单位规定物质的量用“mol”表示的优点是什么 物质的量的单位 摩尔 淘宝新手推广网店的十大方法,怎么做好推广? 淘宝网店怎么做推广? 骂人经典句子 骂了一句脏话犯法吗 买瓷砖嫌弃价格买贵了交了定金后悔了怎么办 顾客说价钱太贵了,能便宜点吗,能打折吗?我该怎么办 英语作文,去南湖公园过中秋节 人鱼小镇 怎么合成 载梦远航四个字的读音 载梦的读音 如何看待美军准备使用火箭来运输物资? 第一个使用火箭企图飞行的人是谁 装饰线描常用的变化方法是 为什么OMIT法:砍削与本质无关的信息? 请教一个公文格式问题: 看到有人在水上作画,有人知道是啥玩意吗? 英语笔译技巧--省略法 三岁孩子屡屡尿床是什么原因 win7系统错将酷狗lrc打开方式选为qq影音,导致之后文件类型变成媒体文 ... 观音中卦阴胜阳是什么意思? 电视据观音中安志杰赵丽颖超市相遇是第几集 获得四级证书在简历上怎么写 孩子音乐听力的训练方法 声乐素养分级吗?谢谢谢谢谢!!! getchar 和 getc的区别? 氯元素为什么会有正5价 五价元素有哪些 化学价一价到五价 正5价的磷元素这么表示 什么叫五价磷 化合价为正5价的原子最外层电子数为多少? 请问这个男孩子是谁? 谁知道 热血高校 三上兄弟的详细信息 阪除了可以组大阪,还可以组什么词? 木星入狮子对射手座来年的影响 木星入狮子对水瓶座来年的影响 卢不要田字念什么? 卢在姓氏里念第几声? 禹城市禹星包装有限公司怎么样? 宝丰八大景点 宝丰市八大旅游景点 东莞市新禹星智能装备有限公司怎么样? 布金山的汉古城遗址