请教几个iostream函数功能 (c++)

来源:百度知道 编辑:UC知道 时间:2024/06/24 09:33:56
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是什么意思?

自己看不明白,高手请指导...

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

我们可以对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实效位,关闭输