1. 程式人生 > 其它 >關於cin>>的一點小細節

關於cin>>的一點小細節

前些時間學了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>
using
namespace 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的距離 

那就成功了!快去試試吧。