解出陣列問題 |
答題得分者是:ENIX007
|
load
一般會員 發表:13 回覆:7 積分:4 註冊:2003-12-31 發送簡訊給我 |
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 發送簡訊給我 |
load您好
首先,請參考版規http://delphi.ktop.com.tw/topic.php?TOPIC_ID=42706
這樣程式碼好看一些,幫版主大大說的
造成無窮迴圈的原因,主要在於後面那個>>;
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
load
一般會員 發表:13 回覆:7 積分:4 註冊:2003-12-31 發送簡訊給我 |
|
load
一般會員 發表:13 回覆:7 積分:4 註冊:2003-12-31 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
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 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |