全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:842
推到 Plurk!
推到 Facebook!

請教一compiler過,但run沒過的錯誤

尚未結案
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-09 22:32:28 IP:61.62.xxx.xxx 未訂閱
hi~各位大人 : 您們好,I am a very new novice at programming.    我有一function如下,希望動態產生我要的一陣列,純屬0或1, 但我使用fprintf得到的值卻不是只有0和1. 函式如下:
 int* WL_generate( int *WL , int h,int w  )
{
 for(int j=0;j
我使用到此函式的宣告及驗證如下
 
#include   // fopen
 FILE *fptr=fopen("c:\\test.txt","w"); 
   int *WL = new int[w*h/2];
   WL=  WL_generate( WL, h , w/2 );
//------------------------------------------------------
 for( int i=0 ; i

可是我得到的值在test.txt如下,我輸入的是128*128的size,
(WL,  1,  0 )=  0 
 (WL,  0,  0 )=  1 
 (WL,  0,  0 )=  2 
 (WL,  0,  0 )=  3 ~63
....
(WL,  0,  2 )= 60 
 (WL,  0,  2 )= 61 
 (WL,  0,  2 )= 62 
 (WL,  0,  2 )= 63 
 (WL,  0,  3 )=  0 
 (WL,  0,  3 )=  1 
 (WL,  0,  3 )=  2 
....
 (WL,  0,127 )= 43 
 (WL,  0,127 )= 44 
 (WL,  0,127 )= 45 
 (WL,  0,127 )= 46 ...>end    請問,我的想法看程式有什不合的地方嗎?
麻煩版上的大人了,請指教o

Best Regard
kmp        發表人 - kmp 於 2004/09/09  22:37:08    發表人 - kmp 於 2004/09/09  22:45:15
        
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-09 22:49:56 IP:221.169.xxx.xxx 未訂閱
kmp:不要先管妳的程式只要看妳的
fprintf(fptr," (WL,=,= )== \n",WL[i j*w/2],i,j);
及輸出格式我建議妳fprintf將先改成
fprintf(fptr," (WL,=,= )== \n",i,j,WL[i j*w/2]);
試試看
Andy Chang
------
Andy Chang
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-09 22:57:46 IP:211.76.xxx.xxx 未訂閱
kmp 您好:    簡單看過之後,發現是不是您輸出時位置誤放?您先參考一下。 < class="code"> for( int i=0 ; i=,= )== \n",WL[i j*w/2],i,j); => fprintf(fptr," WL(=,= )== \n",i,j,WL[i j*w/2]); RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-09 23:04:36 IP:61.62.xxx.xxx 未訂閱
hi~Andy Chang:                 您好,謝謝您o
引言:
kmp:不要先管妳的程式只要看妳的
fprintf(fptr," (WL,=,= )== \n",WL[i j*w/2],i,j);
及輸出格式我建議妳fprintf將先改成
fprintf(fptr," (WL,=,= )== \n",i,j,WL[i j*w/2]);
試試看
真的很抱歉各位及這版資源,我剛想改標題也有錯,因為
run沒過並不是出在此,我想標題也該說邏輯錯誤o    我剛有修改,得到值是0 ,1 ,再來是我要自己看值是不是我要的o
真的很抱歉,也很感謝o
Best Regard
kmp    
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-09 23:24:53 IP:221.169.xxx.xxx 未訂閱
kmp:
我是假設int w=128,h=128;但如果妳認為有邏輯錯誤
那我建議檢查一下
if(( i==2*j )||( i==2*j 1 ))  WL[i j*w/2]=1 ;
  else WL[i j*w/2]=0;
為何妳如此設我不知道但妳有沒有注意紅字部分的值的變化
它的執行順序是w/2->*j-> i
請參考!
Andy Chang
------
Andy Chang
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-09 23:41:16 IP:61.62.xxx.xxx 未訂閱
hi~RichTop :              您好,很高興謝謝您的回答> 在這行: > >>
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-13 10:03:16 IP:140.127.xxx.xxx 未訂閱
hi~Andy Chang:                您好,那天我沒看到您這篇回應就離開,因隔天要早起> 用意:我這兩> <>< face="Verdana, Arial, Helvetica">引言:
kmp:
我是假設int w=128,h=128;但如果妳認為有邏輯錯誤
那我建議檢查一下
if(( i==2*j )||( i==2*j 1 ))  WL[i j*w/2]=1 ;
  else WL[i j*w/2]=0;
為何妳如此設我不知道但妳有沒有注意紅字部分的值的變化
它的執行順序是w/2->*j-> i
Andy Chang大人,我可能邏輯,程式不好,懇請教您,這執行順序,
w/2->*j-> i如何影響這if的判斷式o
Best Regard kmp 發表人 - kmp 於 2004/09/13 10:15:38
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-13 20:48:54 IP:140.127.xxx.xxx 未訂閱
hi~Andy Chang and richtop :           各位大人您們好,謝謝您們,我剛靜心來看這程式,(之前開學般住的) <>我後來知道 class="code"> int* WL_generate( int *WL , int h,int w ) { for(int j=0;j WL[i j*h]=1; else WL[i j*h]=0; } } return WL ; } 或者為
 
for( int i=0 ; ij i*(w/2)]);
在verify部份:也是,也是邏輯錯(同上紅色訂正),而且我有看臨界 WL( 0, 0 )= 1 WL( 1, 0 )= 1 WL( 2, 0 )= 0 WL( 3, 0 )= 0 是ok, 但 WL( 14, 7 )= 1 WL( 15, 7 )= 1 這之後全為0,好像不太對?因為我是用32x32的 如果有知道我的錯的人,歡迎指教,謝謝O
 
 for ( int j=0 ; j  
Best Regard
kmp    發表人 - kmp 於 2004/09/13  22:54:54
        
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-13 23:45:10 IP:221.169.xxx.xxx 未訂閱
kmp:妳是要用一維當二維來處理,So..
但
WL( 14, 7 )= 1 
WL( 15, 7 )= 1 
這之後全為0,好像不太對?因為我是用32x32的 如果有知道我的錯的人,歡迎指教,謝謝O
Ok!重新整理一下:
int w=32,h=32; // 32*32
int *WL = new int[w*h];
WL=  WL_generate( WL, h , w );
for ( int j=0 ; j
Andy Chang
------
Andy Chang
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-14 00:10:50 IP:211.76.xxx.xxx 未訂閱
kmp 您好:    
int* WL_generate( int *WL , int h, int w  )
{
  for (int j=0;jj i*w/2]=1;
            else  WL[j i*w/2]=0;
          }
     }
  return WL ;
}    for ( int r=0; r
修改您的程式如上請參考。 呼叫時使用: int *WL = new int[w*h/2]; WL = WL_generate( WL, h , w ); //WL = WL_generate( WL, h , w/2 ); // 原先您呼叫函式時,因寬只給一半,而在函式中又將寬度除以2,才會只輸出一半的資料。 給您的建議: 因為您現在要處理的是二維陣列或者是影像,因此在做廻圈時,註標建議使用(x,y)或(r,c)或(row,col),這樣比用(i,j)更容易判讀,否則經常會陷入不知此值為何值的困境,徒增偵錯時的困擾。 供您參考!
kmp
一般會員


發表:17
回覆:51
積分:13
註冊:2004-07-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-09-15 00:44:55 IP:140.127.xxx.xxx 未訂閱
非常感謝 > >各位抱歉>
系統時間:2024-05-19 3:58:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!