C++中有关字符串输入的探讨

//只读取一个单词	
//示例一:instr1.cpp--reading more than one string
#include <iostream>
int main()
{
	using namespace std;
	const int ArSize = 20;
	char name[ArSize] = "";
	char dessert[ArSize] = "";
	
	cout << "Enter your name: \n";
	cin >> name;
	cout << "Enter your favorite dessert: \n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << "for you, " << name << ".\n";
	return 0;
}
下面是该程序的运行情况:
	Enter you name:
	Alistair Dreeb
	Enter your favorite dessert:
	I have some delicious Dreeb for you, Alistair.
我们甚至还没有对“输入甜点的提示”做出反应,程序便把它显示出来了,然后立即显示最后一行。这是为什么呢?由于不能通过键盘输入空字符,因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白来定字符串的界。这意味着cin在获取字符串数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。

这个例子的实际结果是:cin把Alistair作为第一个字符串,并将它放到name数组中,再把Dreeb留在输入队列中,当cin在输入队列中搜索用户喜欢的甜点时,他发现了Dreeb,因此cin读取Dreeb,并将它放到了dessert数组中。

//每次读取一行字符串输入
istream中的类提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。
1.面向行的输入:getline()
getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。要调用这种方法,可以使用cin.getline()。该函数有两个参数,第一个参数用来存储输入行的数组的名称,第二个参数是要读取的字符数,如果这个参数为20,则函数最多读取19个字符,余下的空间用于存储自动在结尾处添加的空字符。getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。
例如,假设要使用getline()将姓名读入到一个包含20个元素的name数组中,可以这样使用函数调用:

cin.getline(name,20);
2.面向行的输入:get()
由于get()并不再读取并丢弃换行符,而是将其留在输入队列中,假设我们连续两次调用get():
	cin.get(name,ArSize);
	cin.get(dessert,ArSize);
由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符,因此get()认为已经到达了行尾,而没有发现任何可读取的内容。幸运的是,get()有另一种变体,使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此,可以用它来处理换行符,为读取下一行输入做准备,也就是说,可以采用下面的调用顺序:
	cin.get(name,ArSize);
	cin.get();
	cin.get(dessert,Arsize);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

书灯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值