getline()和get()

来源:互联网 发布:unity3d webgl 编辑:程序博客网 时间:2024/05/18 01:29

istream中的类如(cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。

getline

字符数组

getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。调用方法:cin.getline(name,size)。该函数有两个参数,第一个参数表示数组名称,第二个表示字符数。getline()成员函数读取指定数目的字符或遇到换行符时停止读取。

字符串

调用方法:getline(cin,str)

get

与getline类似,然而为了解决换行符留在输入队列中的原因,可以使用以下写法解决。

cin.get(name,size).get()

空行和其他问题

当getline()或get()读取空行时,将发生什么情况?最初的做法是下一条输入语句将在前一条getline()或get()结束读取的位置开始时;但当前的做法是,当get()(不是getline())读取空行将设置失效位。这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输入:

cin.clear()

另一个潜在的问题是,输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的多,则getline()和get()将把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入。

混合输入字符串和数字

void numstr(){    cout << "What year was your house built?\n";    int year;    cin >> year;    cout << "What is its street address?\n";    char address[80];    cin.getline(address, 80);    cout << "Year built: " << year << endl;    cout << "Address: " << address << endl;    system("pause");}


这里写图片描述

用户根本没机会输入地址。当cin读取年份,将回车键生成的换行符留在了输入队列中。后面的cin.getline()看到换行符后,将认为是一个空行,并将一个空字符串赋给address数组。需要使用get()解决该问题。

strlen()

函数strlen()从数组的第一个元素开始计算字节数,直到遇到空字符。对于未被初始化的数据,第一个空字符出现的位置是随机的。

char charr[20];cout << strlen(charr) << endl;
0 0
原创粉丝点击