getch方法_C++中getch函数使用时注意事项

前几天老师布置了一道作业,让做一个用户管理的类,在写到成员函数setPassword时,需要用到getch()函数,但是使用时出现了一些问题,这里分享一下我是怎么解决的。//getch()函数包含在conio.h头文件中,而非stdlib.h

使用时写的代码如下://集成开发环境是VS2017

string PassWord = "";//初始化密码为空串

cout<

while(true){ch=getch();

if(ch!=13){//转义字符\r的asc是13

cout<

PassWord += ch;}

elsebreak;}

在上面这个代码使用时出现了最终PassWord接收的东西是每次接收的字符后多了一个空格,字符串长度也翻倍了经逐语句调试时发现,奇数次循环时ch接收了从键盘输入的字符,而偶数次循环时getch()函数并没有停留,直接接收了一个空格起初以为循环逻辑有误,后排查没任何问题。后又怀疑对string类型字符串进行+=处理是否有误,Σ(っ °Д °;)っ经各种注释排除法后,发现这两个都是没有问题的,但是大量查阅资料时,都说getch()这个函数接收字符,不显示。没问题啊。但是我只能怀疑这里了(委屈脸),最后发现getch()接收键盘输入时,是以字符串的形式接收的,而C++里面字符串的结尾是以'\0'为标志的。内存规定字符串以\0结束,所以在使用geich()函数是,比如接收字符时,输入的是'a',但实际上getch()接收到了一个字符串"a\0",可以认为是输入时输入了一个a后又拍了一个空格但是ch在定义是是字符型变量char,只能接收到a,所以后面的\0会导致执行第二次循环,所以出现了循环两次的错误。问题分析出来之后就是解决方案了,已经知道问题是ch要接收两个字符,一个'a'一个'\0'那么就可以在写一个getch()吸收掉后面的'\0'如下:ch=getch();getch();这样第一个a是被ch接收到了的,而后面的'\0'就被一个空的getch()吸收掉了后再执行   PassWord+=ch 没问题,测试通过,完美解决;

while ((ch=_getch())!=13) {

cout << "*";password += ch;length++;

getch();}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值