C++里的输入问题

1、cin>>

(1).最基本,也是最常用的用法,输入一个数字
(2). 接受一个字符串,输入结束条件 :遇到“回车”、“空格、Tab键。
对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
结论:
当cin>>从缓冲区中读取数据(不论是字符、数字或字符串)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

2、cin.get()

 (1).读取字符的情况:
输入结束条件:Enter键
对结束符处理:不丢弃缓冲区中的Enter
ch=cin.get() 与 cin.get(ch)是等价的。
注意:
<1> cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取。
<2> ch = cin.get()的返回值是int类型,读取成功时,返回读取字符的ASCII码值;遇到文件结束符时,返回EOF,即-1。
<3> cin.get(ch)如果读取成功,返回的是cin对象,因此可以支持链式操作,如cin.get(b).get©。
(2).读取字符串的情况:
<1> cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符。
<2> 输入超长,则按需要的长度取数据。
<3> cin.get(array,20);读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区。可以用cin.get()将换行符读入变量b来打印验证,发现打印结果为10,即换行符的ASCII码值。这也是cin.get()读取一行与使用getline读取一行的区别所在。getline读取一行字符时,默认遇到’\n’时终止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。
<4> cin.get(str,size);读取一行时,只能将字符串读入C风格的字符串中,即char*;但是C++的getline函数可以将字符串读入C++风格的字符串中,即string类型。鉴于getline较cin.get()的这两种优点,建议使用getline进行行的读取。关于getline的用法,下文将进行详述。

3、cin.getline()

接受一个字符串,可以接收空格并输出

4、getline()

C++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了< string>头文件中了。接受一个字符串,可以接收空格并输出
getline利用cin可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
(1).注意,getline遇到结束符时,会将结束符一并读入指定的string中,再将结束符替换为空字符(’\0’)。因此,进行从键盘读取一行字符时,建议使用getline,较为安全。
(2).和 cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数。

5、gets()

gets 一般只用于读取字符串;
(1).gets可以接收空格,遇到回车认为输入结束;
(2).gets 可接受回车键之前输入的所有字符,并用’\n’替代 ‘\0’。回车键不会留在输入缓冲区中。
(3).gets() 读取字符串时,
语法:gets(字符数组名或指针);
(4).gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。
(5).gets函数可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

6、scanf()

(1).当 scanf 从缓冲区中读取单个字符(%c)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 不会将其忽略,会读取并清除。
(2).当 scanf 从缓冲区中读取数字或字符串(非单个字符)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,scanf 不做处理。
(3).scanf 读取字符串时,当遇到空格、回车和Tab键都会认为输入结束。当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。(所以它不能接收包含空格、回车或Tab等的字符串)

7、getchar()

getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab);注意,getchar函数只能接受单个字符,输入数字也按字符处理,输入多于一个字符时,只接收第一个字符。
(1).getchar 由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止,此时进入到输入缓冲区中(回车字符也放在缓冲区中)。
(2).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。
(3).如果用户在按回车之前输入了不止一个字符,其他字符会保留在输入缓冲区中,等待后续getchar调用读取。即后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值