2 回答
TA贡献1812条经验 获得超5个赞
1.如果在delimeter参数声明为回车,则遇到回车时会停,或者在读到最大长度时会停止
2.若第一个字符就是回车,则字符串为空.可以
cin.get()跳过第一个回车符
3,20是指跳过多少个字符,
cin.ignore(20,'\n')作用是指跳过20个字符或者遇到回车时停止(此时可能跳过字符少于20个)
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个函数,默认的结束字符都是回车。
- 2 回答
- 0 关注
- 286 浏览
添加回答
举报