[問題] 宣告陣列是空值 但是卻有某些欄位不是ꨠ

看板C_and_CPP (C/C++)作者 (小蜜桃)時間14年前 (2011/12/22 05:48), 編輯推噓4(4015)
留言19則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我宣告一個陣列,size大小由輸入的值決定,數入完值之後,陣列還未存入任何的值,已經有 部份的欄位已經存在值了,這是為甚麼? 餵入的資料(Input): nd = 8 s[nd] 預期的正確結果(Expected Output): s[0]=0 s[1]=0 s[2]=0 s[3]=0 s[4]=0 s[5]=0 s[6]=0 s[7]=0 錯誤結果(Wrong Output): s[5]=8 s[7]=4201719 程式碼(Code):(請善用置底文網頁, 記得排版) while(point < 27) { ori = 100; q = 0; for(j = 2;j <= nd;j++) { if(a[j-1] == '\0') { if(ori > route[1][j]) { ori = route[1][j]; temp = j; } } } point = point + (temp-1); a[temp-1] = temp; q = q + capacity[1][temp]; sum = sum + ori; cout<<"第"<<c<<"條:"<<endl; c = c + 1; cout<<"depot-> "<<a[temp-1]-1<<" -> "; i = temp; while(q < 8) { ori = 100; for(j = 2;j <= nd;j++) { if((route[i][j] != 9999) && (route[i][j] != 0)) { if(a[j-1] == '\0') { if(q + capacity[1][j] <= 8) { if(ori > route[i][j]) { ori = route[i][j]; temp = j; } } } } } if( q >= 7) { cout<<"q="<<q<<endl; q = 8; } else if(ori != 100) { point = point + (temp-1); q = q + capacity[1][temp]; cout<<"q="<<q<<endl; a[temp-1] = temp; i = temp; sum = sum + ori; cout<<a[temp-1]-1<<" -> "; } } cout <<"depot"<<endl; cout <<"總旅行距離:"<<sum<<endl; } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.119.213

12/22 07:16, , 1F
第一戒?
12/22 07:16, 1F

12/22 07:36, , 2F
你宣告的陣列在哪裡?
12/22 07:36, 2F

12/22 08:02, , 3F
抱歉第一次po文 s[nd]就是我宣告的陣列
12/22 08:02, 3F

12/22 08:06, , 4F
int i,j,ori,point = 0,q,a[nd],sum = 0,temp,c = 1;
12/22 08:06, 4F

12/22 08:07, , 5F
那個陣列名字打錯 a[nd]就是s[nd]
12/22 08:07, 5F

12/22 09:20, , 6F
nd是寫死在程式碼裡面還是由cin之類的得到的?
12/22 09:20, 6F

12/22 10:14, , 7F
是不是根本沒初始化orz
12/22 10:14, 7F

12/22 10:15, , 8F
nd是由cin來得到的
12/22 10:15, 8F

12/22 10:16, , 9F
這不是合法的 C++,請改用 vector
12/22 10:16, 9F

12/22 10:17, , 10F
照理說宣各陣列假如沒有特別定義欄位的值的話 都會是0
12/22 10:17, 10F

12/22 10:18, , 11F
l大指的是的??
12/22 10:18, 11F

12/22 10:23, , 12F
12/22 10:23, 12F

12/22 10:26, , 13F
不好意思 我對BBS不是很了解 l大所說的這個編號是?
12/22 10:26, 13F

12/22 10:28, , 14F
你在文章列表按下井號,然後打入後面的編號就可以跳到
12/22 10:28, 14F

12/22 10:28, , 15F
特定的文章
12/22 10:28, 15F

12/22 11:28, , 16F
c++並不會幫你做初始化
12/22 11:28, 16F

12/22 14:22, , 17F
哪邊的理告訴你他會是0...還是說你的變數一律global XD
12/22 14:22, 17F

12/22 23:51, , 18F
"照理說"<-這個就是問題; "照spec"只有部份宣告的方式會
12/22 23:51, 18F

12/22 23:52, , 19F
有預設0為初值, 如樓上x大說的未給初值的global變數:)
12/22 23:52, 19F
文章代碼(AID): #1EybGqoS (C_and_CPP)
文章代碼(AID): #1EybGqoS (C_and_CPP)