当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止。下面小编就跟你们详细介绍下c语言中getchar的用法,希望对你们有用。

c语言中getchar的用法

1.getchar

当输入终端在默认的输入模式(cooked)下时getchar是以行为单位进行存取,EOF(Unix/Linux下为组合键Ctrl+D)有两种作用,一个是换行符,一个是结束符。当缓冲区有其它字符时,它只是一个换行符,当前面没有字符是它就是一个地地道道的文件结束符。

Getchar这个函数执行过程

1.当调用getchar时,函数打开输入缓冲,并等待用户的输入。

2.用户进行输入,并结束输入(ctrl+D,回车),此时的ctrl+d只是一个结束这一次输入的动作,并不是EOF.

3.getchar从缓冲区里取一个字符,并返回.

4.缓冲区里字符队列头后移一位,等待再取。

5.回车结束和ctrl+d结束不相同,回车也做为一个字符被存到缓冲区里,而ctrl+d并没有做为一个字符存储。

6.缓冲队列没有字符,此时又按下了ctrl+d此时就是结束输入动作,也就是EOF。

c语言中getchar的用法示例

while((c = getchar()) != EOF)

{

putchar(c);

}

执行程序并输入:”test”+”回车”。此时缓冲队列里就有”test+回车”,并开始返回一个字符”t”然后执行puchar(c)输出”t”,接着回到while取出“e”并输出”e”,反复执行直到取最后一个字符”回车”。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。如果想要结束程序执行必须在缓冲队列没有字符时输入EOF。要想正确理解这个问题 ,你就得记着linux下everything is file。从终端的输入也相当于一个文件,终端输入有两种方式,一种raw一种是cooked的。也就是一个是原始输入,一个是带缓存的。默认的方式是cooked的,所以一定要等到一个换行才完成一个缓存,而开始文件的读取,你可以用stty raw,sty cooked来分别设置。

注意:

getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下

int c;

c = getchar();

2.改变终端的输入方式

static struct termios stored_settings;

void set_keypress(void)                               //设置终端为RAW模式,并关闭回显

{

struct termios new_settings;

cgetattr(0,&stored_settings);

new_settings = stored_settings;

/* Disable canonical mode, and set buffer size to 1 byte */

new_settings.c_lflag &= (~ICANON);

new_settings.c_lflag &= (~ECHO);

new_settings.c_cc[VTIME] = 0;

new_settings.c_cc[VMIN] = 1;

tcsetattr(0,TCSANOW,&new_settings);

return;

}

void reset_keypress(void)                                //恢复终端属性

{

tcsetattr(0,TCSANOW,&stored_settings);

return;

}

也可以用system(“stty raw”)

System(“stty cooked”).

猜你喜欢:

c语言getchar函数的作用,c语言中getchar的用法函数用法相关推荐

  1. c语言time头文件作用,C语言中 time相关的函数 头文件

    1.  time相关的函数在 time.h 中可以查看原型.如下命令可以找出time.h的路径: whereis time.h 2. 先看代码,要包含time.h ================== ...

  2. c语言put语句的作用,C语言中put()与puts()的区别?

    C语言中put()与puts()的区别? 关注:275  答案:2  mip版 解决时间 2021-02-04 15:47 提问者笑低了眉眼 2021-02-04 12:42 C语言中put()与pu ...

  3. c语言while函数作用,C语言中while /do while语句用法

    在c语言中do while与while与我们学的vb,asp.net都一样的,下面我来介绍一下关于C语言中while /do while语句基于用法. C语言while语句的用法 while语句的一般 ...

  4. c语言printf函数的作用,c语言中printf用法及其函数定义

    c语言中printf用法及其函数定义 发布时间:2020-04-09 10:51:14 来源:亿速云 阅读:354 作者:小新 今天小编给大家分享的是c语言中printf用法及其函数定义,很多人都不太 ...

  5. c语言free函数的作用,c语言中free函数的理解

    最近在复习c语言的时候再次用到了malloc函数和free函数,此处着讲解一下自己对这两个函数的理解和认识. 一. malloc函数和free函数的基本概念和基本的用法 对于malloc函数: 1.包 ...

  6. c语言time函数的作用,c语言中time函数的用法

    c语言中time函数的用法 c语言中time函数的用法的用法你知道吗?下面应届毕业生小编就跟你们详细介绍下c语言中time函数的用法的用法,希望对你们有用. c语言中time函数的用法的用法如下: 头 ...

  7. c语言里void什么作用,c语言中void的含义是什么?如何使用?

    c语言中void的含义是什么?如何使用? 发布时间:2020-04-26 14:08:27 来源:亿速云 阅读:416 作者:小新 c语言中void的含义是什么?如何使用?相信有很多人都不太了解,今天 ...

  8. c语言里void什么作用,C语言中void是什么意思?

    C语言中void是什么意思? C语言中"void"表示为无类型,相应的"void *"为无类型指针,常用在程序编写中对定义函数的参数类型.返回值.函数中指针类型 ...

  9. c语言eof不起作用,c语言中EOF的用法

    c语言中EOF的用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中EOF的用法 1.EOF是end of fi ...

最新文章

  1. git 版本控制库的用法及其介绍
  2. 域名没备案使用七牛cdn加速
  3. CHIP-seq 分析笔记
  4. 智能合约漏洞检测论文整理
  5. win10完美还原桌面图标快捷方式小箭头的方法
  6. 原生js实现购物车添加删除商品、计算价格功能
  7. Mac-Windows下IDEA卡顿问题解决
  8. SpringBoot切面应用-输出接口调用日志
  9. java毕业设计_问卷调查系统
  10. ie浏览器打不开闪退_ie浏览器点开闪退_ie浏览器打不开?就是闪退.别的可以_ie浏览器打不开闪退...
  11. ccs安装多版本编译器离线_CCS6.0教程_ccs 全速运行,ccs6 离线安装缺少100v2 驱动-C文档类资源...
  12. 第十章:大鸽同学在哪里?痴月熊学python
  13. 8. Git 远程协作
  14. MinIO与java集成
  15. 开源 免费 java CMS - FreeCMS1.9 站内信
  16. 移动通信基础(1)比特、比特率、符号速率、码片速率、波特率、码元
  17. mp3音频转换器哪个好
  18. 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件。我在哪里把xml文件放在代码中...
  19. 一、启动页面 AppStart
  20. 武汉大学计算机技术VB试题,武汉大学VB考试题库.doc

热门文章

  1. ABC类网络的范围,IP子网划分、构造超网
  2. 微信小程序点击图片,可全屏预览图片,长按可保存可转发朋友
  3. 基于ssm的足球联赛管理系统的设计与实现
  4. RecyclerView.smoothScrollToPosition(),不好用、偶尔失效;scrollToPosition()不好用、偶尔失效
  5. 笔试常见输入总结(Java)
  6. linux no mail for root,Linux定时任务Crontab使用 提示no crontab for root
  7. 电脑窗口保护视力颜色
  8. Midjourney新手图文教程(超详细)
  9. AP5193 DC-DC宽电压LED降压恒流驱动器 LED电源驱动IC
  10. python batch normalization_Batch Normalization的正确打开方式