为了账号安全,请及时绑定邮箱和手机立即绑定

您好,想请教几个iostream函数功能 !麻烦大佬帮忙看看!

您好,想请教几个iostream函数功能 !麻烦大佬帮忙看看!

C C# C++
慕哥6287543 2021-12-09 11:07:25
get(),getline()和ignore()读文本数据时1.cin.get(string,max,delimeter)遇到回车会停吗?2.如果cin.getline(string,max)和cin.getline(string,max,delimeter)在读文本时,遇到的第一个字符就是回车,会出现什么情况?string里会是空吗?3.ignore()函数怎么用?比如cin.ignore(20,'\n');是怎么作用的?20是什么意思?自己看不明白,高手请指导...
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

1.如果在delimeter参数声明为回车,则遇到回车时会停,或者在读到最大长度时会停止
2.若第一个字符就是回车,则字符串为空.可以
cin.get()跳过第一个回车符
3,20是指跳过多少个字符,
cin.ignore(20,'\n')作用是指跳过20个字符或者遇到回车时停止(此时可能跳过字符少于20个)

查看完整回答
反对 回复 2021-12-12
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我们可以对get(str,Size),与getline(str,Size)的区别做一个总结:
分为三种情况来看:
1)输入的字符串不超过限定大小
get(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理;
getline(str,Size):读取所有字符,遇到'\n'时止,并且将'\n'直接从输入缓冲区中删除掉,不会影响下面的输入处理。

2)输入的字符数超出限定的大小
get(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',然后将剩余字符(包括'\n')留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获,影响该输入

处理;
getline(str,Size):读取Size-1个字符,并将str[Size-1]置为'\0',剩余字符(包括'\n')留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。

其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符



3)输入一个空行(即直接回车)
get(str,Size):str将得到'\0',并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获'\n';
getline(str,Size):str将得到'\0',并将'\n'删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。
cin.ignore(20,'\n')作用是指跳过20个字符或者遇到回车时停止
对于这3个函数,默认的结束字符都是回车。



查看完整回答
反对 回复 2021-12-12
  • 2 回答
  • 0 关注
  • 280 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信