以下是引用wfpb在2007-3-12 21:58:36的发言:
也就是说,cin.getline执行时,当用户输入一个回车后,cin.getline从istream中吸取出\n(但是不store),然后函数结束.getline则是把第一个\n当作一行语句中的一个字符对待,因此第二个回车才是函数结束的标志(我总觉得和put back这句有关,但是我的解释还有一点问题,就是put back到底做了什么,getline中有这句,cin.getline没有这句,他们是在这有区别吗?)
lz没提出来,我还真没注意这个问题,后来查了下MSDN,想想会不会是如下原因,望大家一起讨论。。。
istream::getline:
Extracts characters from the stream until either the delimiter delim is found, the limit nCount–1 is reached, or end of file is reached. The characters are stored in the specified array followed by a null terminator. If the delimiter is found, it is extracted but not stored.
The second template function replaces the sequence controlled by str with a sequence of elements extracted from the stream is. In order of testing, extraction stops:
1、At end of file.
2、After the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequence.
3、After the function extracts is.max_size() elements, in which case the function calls setstate(ios_base::failbit).
也就是说,cin.getline执行时,当用户输入一个回车后,cin.getline从istream中吸取出\n(但是不store),然后函数结束.getline则是把第一个\n当作一行语句中的一个字符对待,因此第二个回车才是函数结束的标志(我总觉得和put back这句有关,但是我的解释还有一点问题,就是put back到底做了什么,getline中有这句,cin.getline没有这句,他们是在这有区别吗?)
这个正确
嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP