其實我也不知算是什麼問題,跟動態陣列有點關係 |
尚未結案
|
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
小弟初學,多多指教
我這有2個TXT檔內容都為
0 0 1
0 1 2
0 2 3
1 0 2
1 1 1
1 2 2
2 0 3
2 1 1
2 2 2
---------------------
按第一個button和第二個button會分別將這兩個TXT檔的內容映到Memo1&Memo2
只是很奇怪...在輸入完第2個檔案..
案"button2"輸出時竟然1 0 2會變成4103 14317800 1814(案"button2"輸出正確)
如圖:
http://web.csie.chu.edu.tw/~b9202096/01.jpg
如果先按button1在案button2..會錯誤 如圖: http://web.csie.chu.edu.tw/~b9202096/02.jpg -----------------本人原始碼-拙見---- #include |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 真是抱歉..下次我會注意的 昨天改了一下...(其實只是把BUTTON1中的程式碼移到BUTTON2在修改) 結果能執行第一個就不能執行第2個..能執行第2個就不能執行第1個 就是會出現錯誤..但是晚執行的MEMO會出現數字錯誤且變的很大的問題.. 請問..這是什麼原因呢?batela.tw你好: 看了一下你的程式,主要問是你 class="code"> delete m1; delete m2; 這樣就可以了! 還有你button2中有一段 : int *m2; m2=new int[(w2 1)]; 跟button1中不同你注意到了嗎?宣告的array size不足,導至你直接按button2時,結果會有問題! 最後建議你幾項: >> >! |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
謝謝m8815010指導
你說的問題我會多多注意的~^^
你提供的MEMO讀取TXT真的很好用...原來有這樣的方法ㄚ
PS.那個TXT內容一樣只是方便比較答案而已啦~^^b
---------------------
不過我現在只要按1在案2會出錯...反之亦然..
EX:001..答案卻變成1235 45645 12354之類爆掉狀況
錯誤圖示(剛剛上傳當了..所以只好這樣貼)
http://web.csie.chu.edu.tw/~b9202096/1.jpg
//-----修改後的CODE
int w1,w2;//判斷有幾行 int i=0,j=0,k=0; int a1=0,a2=0; int ar1[3][3];int ar2[3][3];int ar3[3][3]; char ch,ch1,ch2; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //先判斷有幾行 ifstream fin0; fin0.open("D:\\1\\01.txt", ios::in); while(fin0.get(ch)) { if(ch=='\n') w1 ; } fin0.close(); //--讀取 int *m1; m1=new int[(w1 1)*3]; ifstream fin1; fin1.open("D:\\1\\01.txt",ios::in); while(fin1.get(ch1)) { if(ch1=='\n'||ch1==' ') { a1 ; } else m1[a1]=m1[a1] StrToInt(ch1); } fin1.close(); Memo1->Lines->LoadFromFile("D:\\1\\01.txt"); for(i=0;i<(w1 1);i ) { ar1[m1[3*i]][m1[3*i 1]]=m1[3*i 2]; } Memo1->Lines->Add("ar1[0][0]=" IntToStr(ar1[0][0])); delete m1; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //先判斷有幾行 ifstream fin3; fin3.open("D:\\1\\02.txt", ios::in); while(fin3.get(ch)) { if(ch=='\n') w2 ; } fin3.close(); //--讀取 int *m2; m2=new int[(w2 1)*3]; ifstream fin4; fin4.open("D:\\1\\02.txt",ios::in); while(fin4.get(ch2)) { if(ch2=='\n'||ch2==' ') { a2 ; } else m2[a2]=m2[a2] StrToInt(ch2); } fin4.close(); Memo2->Lines->LoadFromFile("D:\\1\\02.txt"); for(i=0;i<(w1 1);i ) { ar1[m2[3*i]][m2[3*i 1]]=m2[3*i 2]; } Memo2->Lines->Add("ar2[0][0]=" IntToStr(ar2[0][0])); delete m2; }種感覺這樣寫很不穩...可是我已經擠不出來想法了 //------------------ 學習..代價.. 發表人 - batela.tw 於 2004/10/22 18:30:35 發表人 - batela.tw 於 2004/10/22 18:31:42 |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
|
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
引言: 拜托知道問題所在的前輩能幫忙... 我現在在BUTTON2產生動態陣列後面印出陣列0 -------------1. int *m2; m2=new int[(w2 1)*3]; Memo2->Lines->Add(IntToStr(m2[0])); ans:印出來的值,任何值都可能,因為new並下會幫你清空記憶體內容為零. 2.只是很奇怪...在輸入完第2個檔案.. 案"button2"輸出時竟然1 0 2會變成4103 14317800 1814(案"button2"輸出正確) ans:因為你設值時以ar1為基準,show時卻以ar2為基準. ar1[m2[3*i]][m2[3*i 1]]=m2[3*i 2]; Memo2->Lines->Add("ar2[0][0]=" IntToStr(ar2[0][0])); 是不是一個ar1,一個ar2 3. ar1[m1[3*i]][m1[3*i 1]]=m1[3*i 2]; 可能要改成 ar1[i/3]][i%3]]=m1[i]; 4.多用f4,f7,f8三個鍵去追蹤程式,還有run->add watch可輸入變數名稱,可以看它的值或用滑鼠指在變數上也可以看它的值. 5.應該還有其它問題,再討論.int *m2; m2=new int[(w2 1)*3]; Memo2->Lines->Add(IntToStr(m2[0]));------------- 理論上新產生的東西什麼都沒有 但是只要我先按BUTTON1在案BUTTON2 它所印出來的答案卻是14291304 我真的不知道問題出在哪... |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
引言: 謝謝您的執導~^^ 很多東西原來都是要經過錯誤才知道 --- 最後我想問一個小問題 我在爬文的時候好像沒看見 就是一維的初始化是這樣寫的 ZeroMemory(m1,sizeof(int)*size1); 那二維的寫法是...? 我想如果經過初始化,new一個陣列內容應該會回0吧1.假如你是宣告 int ar1[3][3]; 你一樣可用 ZeroMemory(ar1,sizeof(ar1)); 2.假如你是動態宣告時,也可,不過需要一點技巧. int **arg; arg = (int **) new int[3]; for (int i=0;i<3;i ) { arg[i] = new int[5]; ZeroMemory(arg[i],sizeof(int)*5); //分別處理,執行3次 } for (int i=0;i<3;i ) delete arg[i]; delete arg; |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
引言: int **arg; arg = (int **) new int[3]; for (int i=0;i<3;i ) { arg[i] = new int[5]; ZeroMemory(arg[i],sizeof(int)*5); //分別處理,執行3次 } for (int i=0;i<3;i ) delete arg[i]; delete arg;謝謝先進~不過... 既然是做3次... arg[i] = new int[5]; ^ ZeroMemory(arg[i],sizeof(int)*5); ^那個..5是什麼意思ㄚ~^^b -------------------- 真是遇到好人了... 發表人 - batela.tw 於 2004/10/24 17:13:17 |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言:batela.tw你好: 一個 >! 另外當時有幫你試了一下你原來的>> 動作即可,應該是不用 >!引言: int **arg; arg = (int **) new int[3]; for (int i=0;i<3;i ) { arg[i] = new int[5]; ZeroMemory(arg[i],sizeof(int)*5); //分別處理,執行3次 } for (int i=0;i<3;i ) delete arg[i]; delete arg;謝謝先進~不過... 既然是做3次...arg[i] = new int[5]; ^ ZeroMemory(arg[i],sizeof(int)*5); ^那個..5是什麼意思ㄚ~^^b -------------------- 真是遇到好人了... 發表人 - batela.tw 於 2004/10/24 17:13:17 |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
謝謝m8815010~
我當初會想說用zero memory的動作是因為我在做乘法時,如果說資料裡面有一個陣列值為0或是說有一行陣列值為0固沒有列在TXT檔上面,如果不先zero memory的動作在相乘時我怕會發生錯誤...
------
那個恕我資質愚昧...
一個int data type的大小就是sizeof(int),*5的話就是5個int的大小了
那麼做完是不是就變成3*5的矩陣阿...因為我不是很懂..書上也沒寫
-----------------
考慮換本書了..
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 謝謝m8815010~ 我當初會想說用zero memory的動作是因為我在做乘法時,如果說資料裡面有一個陣列值為0或是說有一行陣列值為0固沒有列在TXT檔上面,如果不先zero memory的動作在相乘時我怕會發生錯誤... ------ 那個恕我資質愚昧... 一個int data type的大小就是sizeof(int),*5的話就是5個int的大小了 那麼做完是不是就變成3*5的矩陣阿...因為我不是很懂..書上也沒寫 ----------------- 考慮換本書了..batela.tw你: 嗯,我的結論就是記得你> > 所以雖然沒有 >! 另外 class="code"> int a=3; //demension 1 int b=5; //demension 2 int y=0; int *x=new int[a*b]; ZeroMemory((void*)x,sizeof(int)*15); //zero memory for (int i=0;i<15;i ) //assign value we needed x[i]=y ; ShowMessage(*(x 2*5 4)); // for example : representation of value x[3][5] 把想宣告的二維array轉成一維的,因為一個二維array儲存在memory中也是一維的觀念,並沒有什麼維度的觀念的!這樣比較土,但就不用怕以後遇到3維、4維、5維…等等的問題! 另外基本的 >! 發表人 - |
batela.tw
一般會員 發表:6 回覆:14 積分:4 註冊:2004-10-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |