|
정확히 어떠한 에러가 발생하는지, 에러메시지를 알려주셔야 다른 분들이 문제의 원인을 좀더 쉽게
확인해 볼 수가 있을 듯합니다.
: float avg ( int *pt); <-- 아래에는 TForm1의 메서드로 avg 함수를 정의 했는데, 여기에는 일반 전역 함수로 정의되어 있네요.
: const int N = 4;
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: int test [4];
: for (int i = 0; i < N; i++)
: {
: double ans = avg (test);
: AnsiString fMg;
: fMg = Memo1->Text;
: Button1->Caption = FloatToStr(avg(StrToFloat(Memo1->Text))); <<--- avg 함수에서 어떠한 값도 반환하지 않기 때문에 의도되지 않은 결과가 발생할 수 있습니다.
: }
: }
: float __fastcall TForm1::avg (int *pt)
: {
: float sum =0;
: for (int i = 0; i < N; i++)
: {
: sum = sum + *(pt + i); <<--- 합계만 구하고, 평균 값의 반환이 없네요.
: }
: }
: 오류가 나가든요
////////////////////////////////////////////////////////////////////////////
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int test[100]={0,};
int count=Memo1->Lines->Count; //<-- 메모장에 입력된 라인 수
if(count==0) return; //<-- 입력된 라인이 없으면 처리 안함.
ZeroMemory(test,sizeof(test));
for(int index=0; index<count; ++index) {
try {
test[index]=StrToInt(Memo1->Lines->Strings[index]); //<-- 메모장의 각 라인에서 수치를 가져와 test[]에 저장.
} catch(const EConvertError& e) { //<-- 수치가 아닌 잘못된 데이터 입력시 에러메시지 보여주고 처리 안함.
ShowMessage("invalid data...");
Memo1->Lines->Clear();
return;
}
}
float result=avg(test,count); //<-- 평균값 구하기
AnsiString strResult;
strResult.sprintf("Average=%3.2f", result);
Label1->Caption=strResult;
}
//---------------------------------------------------------------------------
float __fastcall TForm1::avg (int *pt, int count) //<-- 단순 포인터만 넘기면 가변 길이 배열의 경우 데이터 개수를 알지 못하기 때문에, 데이터 개수를 알려주는 count 파라미터 추가.
{
float sum =0.0f;
for (int i = 0; i < count; i++)
{
sum = sum + *(pt + i);
}
return (sum/count); //<-- 평균값 반환.
}
|