用getchar()函数读取字符串时,字符串会存储在输入缓冲区中,包括输入的回车字符,下面这篇文章主要给大家介绍了关于C语言中getchar()的用法以及案例的相关资料,需要的朋友可以参考下
getchar()的描述以及用法
getchar()是stdio.h中的库函数,它的作用是从缓冲区中读取一个字符,如果缓冲区中没有字符可供读取,它就会等待终端键盘输入字符,按回车键表示输入结束。
* 回车键也算一个字符,放在缓冲区中(后面会在VS调试监视出给大家看)*
下面是 getchar() 函数的声明:
int getchar(void)该函数的返回类型是int类型,返回值是用户输入字符的ASCII码值。
案例
基础的例子就不列举了,来说说今天刷C语言题目遇到的一个题目
判断输入的是否是字母(简单的题目)
int main()
{
char a = '0';
scanf("%c", &a);
if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z')
printf("YES\n");
else
printf("NO\n");
return 0;
}直接判断就可以了,但是我想着可不可以实现多组输入,输入一个字符判断一个字符(虽然题目没说到)于是我就尝试写了如下代码
int main()
{
char a = '0';
while (scanf("%c", &a) != EOF)
{
if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z')
printf("YES\n");
else
printf("NO\n");
}
return 0;
}此时运行结果如下:
运行出来为啥和我想的不一样,不应该输入一个只判断一次吗?怎么又进了一次循环并自动判断为false输入NO了?然后我开始调试。
这是输入了a之后跳出了第一次循环
然后我按F10程序继续跑了,进入了第二次循环并直接运行了else后的语句
此时我才发现变量a的值发生了变化,变成了'\n',我才意识到键盘录入按回车结束时,回车也算作一个字符'\n'被留在了缓冲区,所以进行了第二次判断字符‘\n’,则输出NO,这时候我才了解到getchar()函数在这里使用的好处了,所以我对代码进行了更改
此时程序重新运行
要想再次使用scanf就要在这里调用getchar()把缓冲区的 '\n' 给拿走,才能完成多组输入字符的判断
图文解释
因为scanf把\n前面的字符读取了,此时缓冲区还剩下'\n',所以在代码中加入一条getchar()将'\n'做清除,方便后续程序的正常进行。
总结
以上就是我对getchar()部分理解,希望对大家有帮助,有待改进的地方希望大家随时指出!
到此这篇关于C语言库函数getchar()新见解的文章就介绍到这了,更多相关C语言 getchar()内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言库函数getchar()新见解
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- ubuntu下C/C++获取剩余内存 2023-09-18
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言qsort()函数的使用方法详解 2023-04-26
- Easyx实现扫雷游戏 2023-02-06
- C语言详解float类型在内存中的存储方式 2023-03-27
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- Qt计时器使用方法详解 2023-05-30
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
