#17012: cin是條件嗎?


linhsinkai@gmail.com (麻煩)


我想問一下上下哪裡不一樣?下面的才給過誒

#include <iostream>
using namespace std;
int main(){
int a;
int b;
cin>>a>>b;
cout<<a+b<<endl;
}

 

VS

 

#include <iostream>
using namespace std;
int main(){
int a;
int b;
while(cin>>a>>b){
cout<<a+b<<endl;}
}

#17013: Re:cin是條件嗎?


asnewchien@gmail.com (david)


我想問一下上下哪裡不一樣?下面的才給過誒

#include
using namespace std;
int main(){
int a;
int b;
cin>>a>>b;
cout<<a+b<<endl;
}

 

VS

 

#include
using namespace std;
int main(){
int a;
int b;
while(cin>>a>>b){
cout<<a+b<<endl;}
}

上面只讀取 1 筆測資。


#17014: Re:cin是條件嗎?


314159265358979323846264338327 ... (少年π)


我想問一下上下哪裡不一樣?下面的才給過誒

#include
using namespace std;
int main(){
int a;
int b;
cin>>a>>b;
cout<<a+b<<endl;
}

 

VS

 

#include
using namespace std;
int main(){
int a;
int b;
while(cin>>a>>b){
cout<<a+b<<endl;}
}

上面的適用於單筆測資,下面的則是多筆
上面的意思:輸入a和b,輸出a+b(只執行1次)

下面的意思:輸入a和b時,輸出a+b(只要有輸入a,b,就可以繼續執行)

這題是多筆測資,所以用下面的才對

一般來說,若沒有特別說明,就用下面的方式

#17015: Re:cin是條件嗎?


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)


回應標題:

cin 會回傳 cin 自己本身,而這也是為何我們可以寫作 cin >> a >> b 。

以上會先執行 cin >> a,回傳 cin ,所以以上的式子變成了 cin >> b ,也是回傳 cin 。

一旦,中途讀取失敗 (讀不到 b ,甚至是在 a 時讀失敗), cin 就會從好狀態 (good state) 轉變為壞狀態 (bad state),也就是有錯誤發生。

當放到條件式裡面時,等同於問最後回傳的 cin 是否處在好狀態 (good state),也就是沒有錯誤發生。如果是,則等價於「true」;反之,等價於「false」。

 

以上。小弟有錯的話煩請各位大大指正。