線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:856
推到 Plurk!
推到 Facebook!

解出陣列問題

答題得分者是:ENIX007
load
一般會員


發表:13
回覆:7
積分:4
註冊:2003-12-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-07 01:38:25 IP:218.170.xxx.xxx 未訂閱
sorry 我寫了一個陣例的問題,但輸入了999之後程式就當住了,麻煩解釋一下這是什麼情形,好像整個程式進入無窮迴路裡。 void __fastcall TForm1::Button1Click(TObject *Sender) { { String a[9]; int j, i, f, z; int k[9]; Label1->Caption=" "; a[0] = ("00~09 :"); a[1] = ("10~19 :"); a[2] = ("20~29 :"); a[3] = ("30~39 :"); a[4] = ("40~49 :"); a[5] = ("50~59 :"); a[6] = ("60~69 :"); a[7] = ("70~79 :"); a[8] = ("80~89 :"); a[9] = ("90~100 :"); String n; n= InputBox("", "please insert integer", ""); if(n=="") { ShowMessage("please insert integer"); } else if(n!="999") { do { (j = n /10); if(j==10) { j = j-1; } k[j]=k[j] 1; n = InputBox("", "please insertinteger", ""); } while(n<"999"); } for(int i=0;i<=9;i ) { f = k[i] / 2; if( k[i]%2==1) { f ; } if( f != 0) { for (int z=1;z<=f;z ) { a[i] = "*"; } } else { a[i] = ""; } Memo1->Lines->Add(a[i]); } //Add(a[i]); //Canvas->TextOut=a[i]; //Label1->Caption =a[i]; } }
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-07 09:10:51 IP:210.243.xxx.xxx 未訂閱
load您好 首先,請參考版規http://delphi.ktop.com.tw/topic.php?TOPIC_ID=42706 這樣程式碼好看一些,幫版主大大說的 造成無窮迴圈的原因,主要在於後面那個>>;
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
load
一般會員


發表:13
回覆:7
積分:4
註冊:2003-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-07 10:09:30 IP:211.21.xxx.xxx 未訂閱
可是我在最前面有宣告啊,k[9]啊,但我用break point 來看,k的值都是很大, 都是builder亂塞的值。
load
一般會員


發表:13
回覆:7
積分:4
註冊:2003-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-07 10:15:25 IP:211.21.xxx.xxx 未訂閱
我給int k[9]={0,0,0,0,0,0,0,0,0};之後, 會出現,project1.ext faulted with message:'access violation at 0x00d2442e:write of address 0x00000004'.Process Stopped .Use Step or Run to continue.這樣是什麼意思 ?
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-07 11:03:47 IP:210.243.xxx.xxx 未訂閱
load您好 沒去注意看您的其他部分,造成Access Violation的原因並不是k陣列的初始化, 而是a陣列...您直接宣告了a陣列的10個元素...沒錯,是"10"個!!(0~9) 但一開始的宣告卻是9個...也就是第10個元素沒位置放啦 以下紅字是幫您修改的部分: <>< face="Verdana, Arial, Helvetica">引言:
void __fastcall TForm1::Button1Click(TObject *Sender)
{    String a[10];
int j,f;//i,z迴圈中已有宣告
int k[10] = {0,0,0,0,0,0,0,0,0,0};
//ZeroMemory(k,sizeof(k));建議使用,不然k陣列有100個怎麼辦?
Label1->Caption=" ";
a[0] = ("00~09 :");
a[1] = ("10~19 :");
a[2] = ("20~29 :");
a[3] = ("30~39 :");
a[4] = ("40~49 :");
a[5] = ("50~59 :");
a[6] = ("60~69 :");
a[7] = ("70~79 :");
a[8] = ("80~89 :");
a[9] = ("90~100 :");
String n;
n= InputBox("", "please insert integer", "");
if(n=="")
{
    ShowMessage("please insert integer");
    return;離開函式,避免跑到迴圈
}    else if(n!="999")
{
    do
    {
        (j = n /10);            if(j==10)
        {
            j = j-1;
        }
        k[j]=k[j] 1;
        n = InputBox("", "please insertinteger", "");
    }while(n<"999");
}
for(int i=0;i<10;i  )
{
    f = k[i] / 2;        if( k[i]%2==1)
    {
        f   ;
    }
    if( f != 0)
    {
        for (int z=1;z<=f;z  )
        {
            a[i]  = "*";//寫反囉
        }
    }
    else
    {
        a[i]  ="";//這也是
    }
    Memo1->Lines->Add(a[i]);
}    //Add(a[i]);
//Canvas->TextOut=a[i];
//Label1->Caption =a[i];    }
//--------------------------------------------------------------------------- 
參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-07 11:58:54 IP:140.135.xxx.xxx 未訂閱
謝謝ENIX007大大
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-07 13:38:17 IP:210.243.xxx.xxx 未訂閱
taishyang版主您太客氣了,小弟於版上獲益良多,盡點棉薄之力是應該的 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
系統時間:2024-11-25 12:45:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!