2024年4月20日发(作者:)

getline()函数:

程序如下:

#include

using namespace std;

int main()

{

char ch[20];

cin >> ch;

e(ch, 20, '/');

cout << ch << endl;

e(ch, 20, '/');

cout << ch << endl;

return 0;

}

比较以下三种运行结果:

(1)

(2)

(3)

第一次运行没有正常结束.第二、三次运行正常结束.本程序

的意图是想从输入流中读取两个语句(I am student.和I

like c++.)。

这三次运行结果读取的第一个语句都是: am student.’I

‘字符没有读取的原因是:用”cin>>”从输入流提取数据.

遇空格就终止。因此读取一个字符‘I’,存放在字符数组元

素ch[0]中,然后在ch[1]中存‘0’。然后用

e(ch,

20, '/');从输入流中读取19个字符(或遇终止标志符“/”),请注

意:此时并不是从输入流的开头读取数据。在输入流中有一个字符指

针.指向当前应访问的字符。在开始时,指针指向第一个字符。在读

入第一个字符‘I’给ch[0]时,指针就移到下一个字符(‘I’后面

的空格),所以getline函数从空格读起,遇到‘/’停止.

第一次运行没有正常结束的原因:在用getline函数读取第二个语句

I like c++.时,因为此语句最后没有终止标志符‘/’且

字符个数不足19个,所以程序在运行时不知道何时结束读

取.所以出错.而第三次运行时,第二个语句虽然最后也没有

终止标识符‘/’但字符个数超过19个,所以在读取第19

个字符后,就结束读取,程序正常结束.

在使用getline函数使其结束读取有两种情况:

(1)读取字符达到指定个数.

(2)遇到终止标志符.

get()函数

程序如下:

#include

using namespace std;

int main()

{

char ch[20];

cin >> ch;

(ch, 20, '/');

cout << ch << endl;

(ch, 20, '/');

cout << ch << endl;

return 0;

}

运行结果:

程序正常结束.而第二个get函数没有读取任何字符,第二个cout <<

ch << endl;语句只是执行换行。

原因:用函数从输入流读字符时.是逐个字符读入,遇终止

标志符时不读入,指针不向后移动,仍然指向终止标识符,下次读取

时扔从终止标志符开始。所以在读取第一个语句后,指针指向终止标

志符’/‘,所以在执行第二个函数数时,读取的第一个字

符是’/‘是终止标志符,结束输入。

getline函数则与get函数不同:用getline函数从输入流读字符时,

一次读入一行,如果遇到终止标识符提前结束,指针移到该终止标志

字符之后,下一个getline函数将从该终止标志的下一个字符开始接

着读。