在C语言中getchar的使用方法和读取规则讲解
目录
- 前言
- 一、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.hwww.devze.com> int main() { int ch = 0; while ((ch = getchar()) != EOF) { putchar(ch); } return 0; }
注意事项
1.这里的EOF并不是输入EOF循环结束2.EOF的真实值是-13.这里的Ctrl+z的效果便是EOF代码执行结果
到这里有些细心的朋友就会发现代码里面并没有换行指令为什么运行的结果会自动换行?
getchardu读取字符的时候真的是在键盘上读取的吗?
getchar 缓冲区 键盘其实在getchar和键盘之间有个缓冲区,在缓冲区是空的时候,getchar就会等待键盘输入字符,当用户输入A时其实多输入了一个回车,这是缓冲区里面就有A\ngetchar首先读取了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/Nhttp://www.devze.com):>"); int ch = getchar(); if (ch == 'Y') { printf("确认成功"); } else { printf("确认失败"); } return 0; }
代码运行结果
总结
从上面我们学习到了getchar,发现其实getchar的使用很简单就是读取字符,但是难的是它的读取字符是的规则,所以我们在使用getchar的时候一定要慎重思考它的读取规则。
到此这篇关于在C语言中getchar的使用方法和读取规则的文章就介绍到这了,更多相关C语言getchar的使用内容请搜javascript索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论