Q&A

  • 예외처리2
오늘은 많은 발전이 있었습니다.

미약하지만 나름대로 만족스럽습니다.

모두 용일님과 동훈님 같은 고수님의 격려에 힘을 얻을 수 있었기 때문이라 생각합니다.



어제에 이어 같은 예외처리를 하고자 합니다.

이번에는 선택적으로 16진수의 형태 문자인 A~F는 참값으로 돌리고자 합니다만 어떻게 해야 할지 모르겠습니다.



이런 것은 어떨까요?



// 입력받은 수가 16진수 형태인지 여부를 묻는 function

function TForm1.AskSixteen(Jinsu: String): Boolean;

var

i, Jungsu : Integer;

HexSet : set of 'A'..'F';

begin

for i := 1 to Length(Jinsu) do

begin

if Jinsu[i] in HexSet then

result := False

else if StrToInt(Jinsu[i]) = Jungsu then

result := False

else

result := True;

end;

end;



나름대로 위와 같은 함수를 만들어서 Boolean형 값을 받고자 했는데 컴파일은 되지만 원하는 결과값을 가질 수는 없었습니다.

어떻게 하면 좋겠습니까?



어제와 같은 방법으로 예외처리를 할 수 있는 방법이 있다면 좋겠는데...

다시한번 고수님들의 조언을 간곡히 부탁드리는 바입니다.

2  COMMENTS
  • Profile
    최용일 2000.09.21 08:47
    안녕하세요. 델파이세상(http://www.freechal.com/delphiworld)의 최용일입니다.



    아래와 같이 하세요...



    // 입력받은 수가 16진수 형태인지 여부를 묻는 function

    function TForm1.AskSixteen(Jinsu: String): Boolean;

    begin

    Result := True;

    try

    StrToInt('$' + Jinsu);

    except

    on EConvertError do

    Result := False;

    end;

    end;



    ^^ 항상 즐코하세요.



    초보자 wrote:

    > 오늘은 많은 발전이 있었습니다.

    > 미약하지만 나름대로 만족스럽습니다.

    > 모두 용일님과 동훈님 같은 고수님의 격려에 힘을 얻을 수 있었기 때문이라 생각합니다.

    >

    > 어제에 이어 같은 예외처리를 하고자 합니다.

    > 이번에는 선택적으로 16진수의 형태 문자인 A~F는 참값으로 돌리고자 합니다만 어떻게 해야 할지 모르겠습니다.

    >

    > 이런 것은 어떨까요?

    >

    > // 입력받은 수가 16진수 형태인지 여부를 묻는 function

    > function TForm1.AskSixteen(Jinsu: String): Boolean;

    > var

    > i, Jungsu : Integer;

    > HexSet : set of 'A'..'F';

    > begin

    > for i := 1 to Length(Jinsu) do

    > begin

    > if Jinsu[i] in HexSet then

    > result := False

    > else if StrToInt(Jinsu[i]) = Jungsu then

    > result := False

    > else

    > result := True;

    > end;

    > end;

    >

    > 나름대로 위와 같은 함수를 만들어서 Boolean형 값을 받고자 했는데 컴파일은 되지만 원하는 결과값을 가질 수는 없었습니다.

    > 어떻게 하면 좋겠습니까?

    >

    > 어제와 같은 방법으로 예외처리를 할 수 있는 방법이 있다면 좋겠는데...

    > 다시한번 고수님들의 조언을 간곡히 부탁드리는 바입니다.

  • Profile
    초보자 2000.09.21 18:30
    최용일님 감사합니다.

    16진수로 인식하기 위해서는 입력받은 문자 앞에 '$'를 사용하면 된다는 말씀이시죠.

    그럼 혹 2진수로 인식받게 하려면 어떤 특수 문자가 있읍니까?

    부탁드릴께요.

    같은 방법으로 다음과 같이 function을 만들어 보긴 했었지만...



    // 입력받은 수가 2진수 형태인지를 묻는 function



    function TForm1.AskTwo(Jinsu: String): Boolean;

    begin

    for i := 1 to Length(Jinsu) do

    begin

    Num := StrToInt(Jinsu[i]);

    // 입력받은 수가 1 또는 0이 아니면 True를 반환하여 Mistake(Str); 을 실행

    if (Num <> 1) and (Num <> 0) then

    begin

    result := True;

    break;

    end

    else

    result := False;

    end;



    // 이러한 방법은 2진수 형태가 아닌 모든 경우에 대해서는 고려할 수가 없었습니다.



    혹 이러한 방법에 입력되는 수가 문자가 들어온 경우도 고려할 수 있는 방법은 없겠습니까?

    예외처리를 포함시켜서 말이죠.

    var

    Jungsu, i, Num : Integer;

    begin

    if StrToInt(Jinsu) = Jungsu then

    begin

    for i := 1 to Length(Jinsu) do

    begin

    Num := StrToInt(Jinsu[i]);

    // 입력받은 수가 1 또는 0이 아니면 True를 반환하여 Mistake(Str); 을 실행한다.

    if (Num <> 1) and (Num <> 0) then

    begin

    result := True;

    break;

    end

    else

    result := False;

    end;

    end

    else

    begin

    try

    Jungsu := StrToInt(Jinsu);

    except

    on EConvertError do

    result := True;

    end;

    end;

    end;



    컴파일에는 이상이 없는데 원하는 결과를 얻지는 못했습니다.

    무슨 문제가 있는지... 그래 이렇게 다시 부탁을 드립니다.

    덕분에 요즘 아주 코딩이 즐겁습니다. 감사드리며 전 이만 물러가겠습니다.