C++Primer第五版第六章练习6.48

文章分析了一个包含assert的循环,指出其在检测输入文件结束或目标字符串时的逻辑问题。建议将assert修改为检查实际输入是否等于目标字符串,以实现预期的错误检查功能。
/*
练习6.48:
说明下面这个循环的含义,它对assert的使用合理吗?
string s;
while(cin>>s && s!=sought) { }//空函数体
assert(cin);
答:
含义:当输入文件结束符或者输入目标字符串时,终止循环, 执行assert语句。
如果输入文件结束符,cin为假,assert输出信息并终止程序的执行。
如果输入目标字符串,cin为真,assert什么也不做。
assert宏常用于检查“不能发生”的条件。
此处用assert(cin)的目的:如果cin不为sought,本不应该执行到assert语句。但是执行到了assert语句,此时需要assert输出信息并终止程序的执行。但是只要是有效输入,assert的表达式一直为真,什么也不做。这是没有意义的。起不到检查“不能发生”的条件的目的。
应改为:assert(s==sought);
*/
#include "TouWenJian_6.h"

int main(int argc, char *argv[])
{
//	for(int i=1;i<argc;++i)
//		cout<<argv[i]<<endl;
	string s;
	string sought="goal";
	while(cin>>s && s!=sought) { }//空函数体
//	assert(cin);
	assert(s==sought);
	return 0;
}














评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值