本来以为while(cin>>a[n++]);可以直接读入一行结束,但是发现根本无法退出循环,用VS调试到行尾就看不到内容了,而此时循环没有退出也没有报错。大概是把换行符当整数读入了所以cin并没有fail?然后尝试了:inttemp;while(true){cin>>temp;if(temp=='\n')break;a[n++]=temp;}样例可以过,但是依然不能AC(OJ上的一道题),我想大概是可能有跟\nASCII值相同的整数。当然,可以用字符串先整行读入再解析,但是难道C++中没有更好更简洁的方法吗?因为问题本身并不难。
2 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
自己处理空格还是蛮麻烦的。一般用sstream就好,真要想自己做,也是可以。#include usingnamespacestd;//returntrueif\n,orreturnfalseboolescape_white_space(istream&is){chardummy;while(true){is>>dummy;if(dummy=='\n'){returntrue;}elseif(!isspace(dummy)){is.putback(dummy);returnfalse;}}}intmain(){inta[10];cin>>std::noskipws;intn=0;while(true){if(escape_white_space(cin))break;cin>>a[n++];}for(inti=0;i{ cout<}return0;}再延伸一步,可以自己写一个manipulator。//willabsorbwhitecharacterbutiflinebreak,thenseterroristream&ws_on_lb_error(istream&is){chardummy;while(true){is>>dummy;if(dummy=='\n'){is.setstate(ios_base::failbit);returnis;}elseif(!isspace(dummy)){is.putback(dummy);returnis;}}}怎么用呢?和标准的manipulator一样用!inta[10];cin>>std::noskipws;intn=0;//假设开头没有任何whitespacewhile(cin>>a[n++]>>ws_on_lb_error){}cin>>xyz返回false的唯一原因是failbit或者badbit被设置了。所以你自己写可以自己根据\n设置failbit。
哔哔one
TA贡献1854条经验 获得超8个赞
用cin读int会直接跳过空格回车,没办法区分是否换行。一个办法是把整行读出来然后再用sscanf或者sstream,这样也不算很麻烦。直接读大概是没办法了。
添加回答
举报
0/150
提交
取消