c++ 常用输入方法以及它们的区别 cin cin.getline,getche等

前言

学了c++一阵日子了,对于一些常见的输入方法却总是云里雾里,为什么cin.getline之后不用cin.get吸收回车?为什么cin之后就需要,cin之前也不需要?getchar,getche,getch,它们之间区别有哪些。这些东西我总是搞忘,然后查资料,然后搞忘。现在就让我来一一总结一下。

一、cin.get

1.有三个重载形式。
cin.get()可以吸收单个值而不返回;
a=cin.get cin.get(a)都是将返回值赋给a的方法;
cin.get(str,n)是将输入的n-1 个值给str,第n个值默认为‘\0’,此方法在遇到回车符时结束。最后缓冲区仍留下回车符。
也可写cin.get(str,n,‘a’)遇到a结束

二、cin.getline()

cin.getline(str,n)是将输入的n-1 个值给str,第n个值默认为‘\0’,此方法在遇到回车符时结束。最后缓冲区不留下回车符。(但也不吸收回车符)

三、cin

输入结束条件 :遇到Enter、Space、Tab键。

当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,(因此,输入前先回车不影响结果)若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;

四.getline

getline函数的参数使用了string字符串,所以声明在了<string>头文件中了。
也是将输入的字符串赋给string而不是char数组,与上述cin.get与cin.getline不同。
getline(cin,str)为其用法,getline()遇到结束符时,会将结束符一并读入指定的string中,再将结束符替换为空字符。;

五.scanf

与cin在细节上相同

六、getchar()

函数名:getchar()

头文件:stdio.h

功 能:读取控制台输入的字符,并保存在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。

七、getch()

函数名:getch()

头文件:conio.h

功 能:从控制台读取一个字符,但不显示在屏幕上(不带回显)。

原 型:int getch(void)

返回值:读取的字符

八、getche()

函数名:getche()

头文件:conio.h

功 能:输入后立即从控制台取字符,不以回车为结束,且立刻显示在屏幕上(带回显)。

用 法:int getche(void);

p.s

对getche,输入回车再输出它的ascll码能看到其是13而不是10,这是为什么?
原因是,按下回车键在windows其实有两个符号\r \n,getche首先接受的是\r。通常来说。C语言会自动将回车转化为\n,而getch()则是比较低级的,会越过这个处理,貌似没有经过输入流缓冲,而是直接调用键盘服务中断获得的,就是原始按键。因此仍是\r \n。这里有详情解释。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值