#17012: cin是條件嗎?


linhsinkai@gmail.com (麻煩)

學校 : 臺北市私立延平高級中學
編號 : 92396
來源 : [60.251.47.132]
最後登入時間 :
2019-03-09 17:22:04
a002. 簡易加法 | From: [1.160.28.109] | 發表日期 : 2019-02-28 15:06

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

#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)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
a002. 簡易加法 | From: [61.223.44.184] | 發表日期 : 2019-02-28 15:36

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

#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 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.136.179.30]
最後登入時間 :
2024-04-29 19:11:35
a002. 簡易加法 | From: [223.140.120.77] | 發表日期 : 2019-02-28 15:37

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

#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...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a002. 簡易加法 | From: [49.158.83.43] | 發表日期 : 2019-02-28 16:07

回應標題:

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

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

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

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

 

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

 
ZeroJudge Forum