/*
练习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;
}
C++Primer第五版第六章练习6.48
于 2024-01-19 12:42:52 首次发布
文章分析了一个包含assert的循环,指出其在检测输入文件结束或目标字符串时的逻辑问题。建议将assert修改为检查实际输入是否等于目标字符串,以实现预期的错误检查功能。
33万+

被折叠的 条评论
为什么被折叠?



