第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++如何不使用字符串讀入一行不定數(shù)目的整數(shù)?

C++如何不使用字符串讀入一行不定數(shù)目的整數(shù)?

不負相思意 2019-04-21 20:37:09
本來以為while(cin>>a[n++]);可以直接讀入一行結束,但是發(fā)現(xiàn)根本無法退出循環(huán),用VS調試到行尾就看不到內容了,而此時循環(huán)沒有退出也沒有報錯。大概是把換行符當整數(shù)讀入了所以cin并沒有fail?然后嘗試了:inttemp;while(true){cin>>temp;if(temp=='\n')break;a[n++]=temp;}樣例可以過,但是依然不能AC(OJ上的一道題),我想大概是可能有跟\nASCII值相同的整數(shù)。當然,可以用字符串先整行讀入再解析,但是難道C++中沒有更好更簡潔的方法嗎?因為問題本身并不難。
查看完整描述

2 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

自己處理空格還是蠻麻煩的。一般用sstream就好,真要想自己做,也是可以。
#include
usingnamespacestd;
//returntrueif\n,orreturnfalse
boolescape_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,thenseterror
istream&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;
//假設開頭沒有任何whitespace
while(cin>>a[n++]>>ws_on_lb_error)
{
}
cin>>xyz返回false的唯一原因是failbit或者badbit被設置了。所以你自己寫可以自己根據(jù)\n設置failbit。
                            
查看完整回答
反對 回復 2019-04-21
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

用cin讀int會直接跳過空格回車,沒辦法區(qū)分是否換行。
一個辦法是把整行讀出來然后再用sscanf或者sstream,這樣也不算很麻煩。直接讀大概是沒辦法了。
                            
查看完整回答
反對 回復 2019-04-21
  • 2 回答
  • 0 關注
  • 347 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號