C++如何不使用字符串读入一行不定数目的整数?

本来以为while(cin>>a[n++]);可以直接读入一行结束,但是发现根本无法退出循环,用VS调试到行尾就看不到内容了,而此时循环没有退出也没有报错。大概是把换行符当整数读入了所以cin并没有fail?
然后尝试了:
inttemp;
while(true)
{
cin>>temp;
if(temp=='\n')break;
a[n++]=temp;
}
样例可以过,但是依然不能AC(OJ上的一道题),我想大概是可能有跟\nASCII值相同的整数。
当然,可以用字符串先整行读入再解析,但是难道C++中没有更好更简洁的方法吗?因为问题本身并不难。
桃花长相依
浏览 725回答 2
2回答

守着星空守着你

自己处理空格还是蛮麻烦的。一般用sstream就好,真要想自己做,也是可以。#includeusingnamespacestd;//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>std::noskipws;intn=0;//假设开头没有任何whitespacewhile(cin>>a[n++]>>ws_on_lb_error){}cin>>xyz返回false的唯一原因是failbit或者badbit被设置了。所以你自己写可以自己根据\n设置failbit。

哔哔one

用cin读int会直接跳过空格回车,没办法区分是否换行。一个办法是把整行读出来然后再用sscanf或者sstream,这样也不算很麻烦。直接读大概是没办法了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript