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函数将从该终止标志的下一个字符开始接
着读。


发布评论