文章目录

  • 前言
  • 一、getchar是什么?
  • 二、getchar的使用方法
    • 1.只获取一次(字符/字符串)的代码样例
    • 2.循环获取(字符/字符串)的代码样例
  • 三、getchar的读取规则
  • 总结

前言

今天为大家分享getchar在C语言中的使用


一、getchar是什么?

getchar中文意思是获取字符,getchar函数从标准输入输出里读取下一个字符,返回类型为int整形,返回用户输入的ASCII码值,如果到达文件末尾或者出错返回EOF

二、getchar的使用方法

1.只获取一次(字符/字符串)的代码样例

代码如下(示例):

#include<stdio.h>
int main()
{int ch = getchar();putchar(ch);return 0;
}

代码执行结果

2.循环获取(字符/字符串)的代码样例

代码如下(示例):

#include<stdio.h>
int main()
{int ch = 0;while ((ch = getchar()) != EOF){putchar(ch);}return 0;
}
注意事项
1.这里的EOF并不是输入EOF循环结束
2.EOF的真实值是-1
3.这里的Ctrl+z的效果便是EOF

代码执行结果

到这里有些细心的朋友就会发现代码里面并没有换行指令为什么运行的结果会自动换行?

getchardu读取字符的时候真的是在键盘上读取的吗?
getchar             缓冲区              键盘
其实在getchar和键盘之间有个缓冲区,在缓冲区是空
的时候,getchar就会等待键盘输入字符,当用户输入
A时其实多输入了一个回车,这是缓冲区里面就有A\n
getchar首先读取了A然后输出,然后又上去读取了\n
再输出\n就达到了换行的效果,所以B会在第三行输入

三、getchar的读取规则

讲了这么多可能很多人都不明白这么一个代码有什么用呢?其实在很多地方都会用到,比如模拟用户登入场景。但是写这个代码的时候就要注意getchar的读取规则
代码如下(示例)

#include<stdio.h>
int main()
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password);printf("请确认密码(Y/N):>");int ch = getchar();if (ch == 'Y'){printf("确认成功");}else{printf("确认失败");}return 0;
}

代码运行结果

在这里我们看到都还没确认就直接输出确认失败,到这里大家应该都明白了是什么问题吧?没错就是\n的问题,这里getchar发现缓冲区里面还有一个\n就没等我们输入直接把\n读走
那应该如何解决呢?
代码如下(示例)

#include<stdio.h>
int main()
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password);getchar();printf("请确认密码(Y/N):>");int ch = getchar();if (ch == 'Y'){printf("确认成功");}else{printf("确认失败");}return 0;
}

代码运行结果

接下来我们再想大家思考一个问题,当密码里面有空格的时候还会确认成功吗?

没错还是会失败,这又是为什么呢?因为数组把空格前面的123456读走了,但是缓冲区里还剩下空格abcdef\n所以getchar还是会读取缓冲区里面的东西
那该怎么解决呢?
代码如下(示例)

int main()
{char password[20] = { 0 };printf("请输入密码:>");scanf("%s", password);int temp = 0;while((temp=getchar())!='\n');{;}printf("请确认密码(Y/N):>");int ch = getchar();if (ch == 'Y'){printf("确认成功");}else{printf("确认失败");}return 0;
}

代码运行结果


总结

从上面我们学习到了getchar,发现其实getchar的使用很简单就是读取字符,但是难的是它的读取字符是的规则,所以我们在使用getchar的时候一定要慎重思考它的读取规则。

【getchar】在C语言中getchar的使用方法和读取规则相关推荐

  1. 关于C语言中getchar()函数的用法

    前言:ASCII码 ASCII码是现在通用的单字节编码系统,它使用7位或8位二进制数字的指定组合来表示128或256个可能的字符,其全称是美国信息交换标准代码.ASCII码对照表:ascii码对照表在 ...

  2. c语言getchar函数的作用,c语言中getchar的用法函数用法

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

  3. c语言 编译开关用法,C语言中define的使用方法

    C语言中define的使用方法 学习了这么多年C语言,说实话对宏自以为了如指掌了,没想到看内核代码的时候还是那么吃力,设备驱动代码中有很多这样或者那样的宏定义,各种define都有哪些学习方法呢?以下 ...

  4. c语言include不起作用,c语言中include的使用方法

    c语言中include的使用方法 发布时间:2020-06-16 09:09:37 来源:亿速云 阅读:185 作者:Leah 这篇文章将为大家详细讲解有关c语言中include的使用方法,小编觉得挺 ...

  5. c语言 函数参数 const,c语言中const的使用方法

    c语言中const的使用方法 发布时间:2020-06-22 16:03:32 来源:亿速云 阅读:188 作者:Leah 这篇文章运用简单易懂的例子给大家介绍c语言中const的使用方法,代码非常详 ...

  6. c语言gets和getchar区别,C语言中 gets 和 getchar 有什么区别

    C语言中 gets 和 getchar 有什么区别 发布时间:2020-07-22 09:14:29 来源:亿速云 阅读:81 作者:Leah 这期内容当中小编将会给大家带来有关C语言中 gets 和 ...

  7. c语言getchar的不赋任何变量,C语言中getchar中的问题

    许多初学者都习惯用 char型变量接收getchar.getc,fgetc等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误.getchar等函数的返回值类型都是int型 下面是getcha ...

  8. C语言中getchar()函数的详解

    文章目录 关于getchar()函数的基本作用 getchar()函数基本案例 在循环当中的getchar() getchar()函数的作用 清理缓冲区中多个字符 关于getchar()函数的基本作用 ...

  9. C语言中getchar()的用法详谈,c语言getchar的用法

    1.从缓冲区读走一个字符,相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致), 所以如果不在此加一个getchar()把这个回车 ...

  10. C语言中getchar()的用法详谈

    大多数人只看getchar 名字,以为其返回值是char 类型.但是getchar 的确不是char 类型,而是int 类型,其原型如下: int getchar(void); getchar有一个i ...

最新文章

  1. java虚拟机线程调优与底层原理分析_Java并发编程——多线程的底层原理
  2. echart旭日图_150Echarts - 旭日图(Sunburst Label Rotate)
  3. Curator实现分布式锁的基本原理-LockInternals.attemptLock
  4. IIS相关问题及解决方案
  5. linux truncate文件,linux系统编程:用truncate调整文件大小
  6. [计组]寄存器和存储器的区别
  7. 首发天玑1200!Redmi电竞旗舰首曝:电池容量或超4500mAh
  8. POJ 3415 后缀数组+单调栈
  9. 小废物在我面前痛不欲生……(图)
  10. 敏捷教练 V 形六步法实战:从布朗运动到深度协作
  11. 一次性补助20万,博士买房比市价低1.5万/平!26城硕博引进政策哪家强?
  12. Niushop 商品分类、规格和类型之间的关系
  13. 设备管理器出现“未知USB设备”同时蓝牙不可用的解决方法
  14. 您所需要的已经不是吃饱喝足和睡暖了
  15. 人工智能导论——遗传算法求解TSP问题实验
  16. centos7 vim查找_如何在 Vim/Vi 中快速查找和替换文本内容
  17. 已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。
  18. 51单片机(六)矩阵键盘和矩阵键盘密码锁
  19. 小米路由器4a千兆版刷固件_小米路由器4A千兆版恢复出厂设置的方法
  20. 杭州/北京内推 | 阿里达摩院生物医学信息处理团队招聘24届春招实习生

热门文章

  1. Windows如何根据代码签名生态系统确定要信任的软件
  2. 计算机主机mac地址怎么查,怎么查看电脑的Mac地址
  3. Excel计算个人所得税公式
  4. [听风]TBC炼金速冲1-375
  5. 2022网吧行业发展前景分析
  6. Markdown链接及脚注
  7. 软件需求工程2018期末题
  8. java中重命名文件夹名,【Java】对文件或文件夹进行重命名
  9. Mysql客户端给字段添加中文数据报错SQL错误(1366):Incorrect string value: ‘\xE5\xA4\xA7\xE5\xB9\x85...‘ for column ‘nam
  10. Altium_Designer-原理图库如何添加低电平有效的管脚?