關於cin>>的一點小細節
阿新 • • 發佈:2021-07-22
前些時間學了dijstra,因為一處bug卡了很久,反覆亂調後發現是main函式的初始化圖出現了問題,已經接觸過的朋友應該一看就懂,沒學過的朋友只要知道下面的程式碼是關於圖的初始化,map[i][j]就是節點i到節點j的距離就可。
話不多說,直接上程式碼:
#include <iostream> using namespace std; int map[3][3]; int main() { int a,b,d; cin>>a>>b>>d; // 輸入節點a,b和a到b的距離 d map[b][a] = map[a][b] = d; //更新a、b的距離 // 輸出無向圖 for (int i = 1; i <= 2; i++) { for (int j = 1; j <= 2; j++) { cout<<map[i][j]<<" "; } cout<<"\n"; } return 0; }
輸入: 1 2 10
輸出:
節點1到節點2的距離為10故輸出的map[1][2] = map[2][1] = 10
如果將程式碼改為:
#include <iostream> usingnamespace std; int map[3][3]; int main() { int a,b; cin>>a>>b>>map[a][b]; // 輸入節點a,b和a到b的距離 d map[b][a] = map[a][b]; // 更新a、b的距離 // 輸出無向圖 for (int i = 1; i <= 2; i++) { for (int j = 1; j <= 2; j++) { cout<<map[i][j]<<""; } cout<<"\n"; } return 0; }
輸出變為:
為什麼呢?
第二段程式碼我直接輸入map[a][b],再更新距離不可以嗎??
可以,但是cin>>這條語句還沒結束,a,b還在輸入流中,那map[a][b]的具體地址從哪裡來呢?
如果少加修改:
// 輸入節點a,b和a到b的距離 d cin>>a>>b; cin>>map[a][b]; map[b][a] = map[a][b]; // 更新a、b的距離
那就成功了!快去試試吧。