c++字符串整行输入问题(getline(),get())

首先定义4个字符类型的数组

const int max=20;
char firstname[max],
lastname[max],
grade[max],
age[max];


录入信息后得到这样的结果:

What is your first name? William Sherlock

What is your last name?Homes

What is your grade?3

What is your age?20

Name : William Sherlock Homes

Grade:3

Age:20

当需要从键盘输入一个带空格的字符串时,例如 William Sherlock,不能简单地用cin将 William Sherlock输入到数组firstname中,那么就需要iostream中的getline()和get()

cout << "What is your first name?";
	cin.getline(firstname, max);
cout << "What is your last name ?";
	cin.getline(lastname, max);
cout << "What is your grade?";
	cin.getline(grade, max);
cout << "What is your age?";
	cin.getline(age, max);
cout << "Name:";
	cout << firstname <<" "<< lastname;
	cout << "Grade:";
	cout << grade << endl;
	cout << "Age:";
	cout << age;


输入信息,结果就是想要的

但是,当输入firstname时改为

cin.getline(firstname,10);

结果就会变为
What is your first name?William Sherlock
What is your last name ?What is your grade?What is your age?Name:William S Grade:
Age:请按任意键继续. . .

也就是说,我们根本没有输入后面的机会。

(这里Name只get到9个字符的原因是getline(firstname,10)中第二个参数为10,而提取时只提取9个字符,最后用空字符\0来填补最后一个字符,如果是回车的话,则会替代换行符)

把第一个getline改为get

What is your first name?William Sherlock
What is your last name ?What is your grade?3
What is your age?20
Name:William S herlockGrade:3
Age:20请按任意键继续. . .

Name中虽然多了一个空格(firstname只读9个字符然后加\0),但是所有字符都get到了

这是因为当输入包含的字符比指定的多,getline()和get()函数会把余下的字符留在队列中,下一次依然读取到换行符结束(get()函数不舍弃换行符),而getline()函数还会设置失效位,并关闭后面的输入


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值