30-C++基础-字符串输入

4.2.3 字符串输入

程序string.cpp有一个缺陷,这种缺陷通过精心选择输入被遮盖掉了。程序4.3揭开了他的面纱,揭示了字符串输入的技巧

程序4.3    instr1.cpp

//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<<endl;
	return 0;
} 

该程序的意图很简单:读取来自键盘的用户名和用户喜欢的甜点,然后显示这些信息。下面是该程序的运行情况:


我们甚至还没有对“输入甜点的提示”作出反应,程序便把它显示出来了,然后立即显示最后一行,cin是如何确定已完成字符串输入呢?由于不能通过键盘输入空字符,因此cin需要用别的方法来确定字符串的结尾位置。cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。

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

另一个问题是,输入字符串可能比目标数组长(运行中没有揭示出来)。像这个例子一样使用cin,确实不能防止包含30个字符的字符串放到20个字符的数组中的情况发生。

很多程序都依赖于字符串输入,因此有必要对该主题做进一步探讨。我们必须使用cin的较高级特性,这将在第17章介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值