C++ getline与get使用方法

本文参考 C++ Primer Plus
getline 与 get 是面向行的输入函数。

重点:
getline():读取一行输入,直到换行符时读取结束,getline 会将换行符丢弃。
get():读取一行输入,直到换行符时读取结束,getl 不会将换行符丢弃。

getline() 函数原型: cin.getline(name, Character Length);
第一个参数name:存储输入行的数组名称;
第二个参数 Character Length:读取的字符数。
PS. get() 函数原型与 getline() 类似

getline() 读取停止条件:(1)读取指定数目的字符(2)遇到换行符

程序实例:

问题1:

 cin.get(str1, size);
 cin.get(str2, size);

由于第一次调用get后,换行符保留,第二次调用就会将换行符赋给str2,因此需要做处理,否则第二次读不到信息。

所以衍生出get() 另一种变体。

不带任何参数的get:

cin.get();//可以读取下一个字符,可以用它来处理 换行符

程序修改如下:

 cin.get(str1, size);
 cin.get();
 cin.get(str2, size);

或者

 cin.get(str1, size).get();  //即 cin.get(str1, size) + cin.get()

或者

cin.getline(str1,size).getline(str2,size);

存在的一些问题:
(1)读取空行
当getline 和 get 读取空行时,输入会被阻断,但可以用以下命令来恢复

cin.clear();

(2)输入的字符比分配空间长,则余下字符被留在输入队列中,而getline还会设置失效位,并关闭后面的输入。这个问题的解决后续再讲。

(3)混合输入数字和面向行的字符串,程序eg:

int main()
{
	 using namespace std;
	 cout << "what year was your house built?\n";
	 int year;
	 cin >> year;
	 cout << "what is the strees address?";
	 char address[80];
	 cin.getline(address, 80);                      //用户没机会输入地址,问题在于,cin 读取年份时,将  \n 留在输入队列中,
	                                                //而getline 看到换行符,认为空行,就将空行赋给 address
	 cout << "Year bulit: " << year << endl;
	 cout << "Address: " << address << endl;
	 cout << "Done!\n";
	 return 0;
}

解决办法:

cin >> year;
cin.get();                //获取空行

//or
(cin >> year).get();

程序修改如下:

int main()
{
 using namespace std;
 cout << "what year was your house built?\n";
 int year;
 (cin >> year).get();
 cout << "what is the strees address?\n";
 char address[80];
 cin.getline(address, 80);
 cout << "Year bulit: " << year << endl;
 cout << "Address: " << address << endl;
 cout << "Done!\n";
 cin.get();
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi小黄人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值