이건 변수를 static으로 선언/정의했는지의 문제가 아닙니다.
table 함수 내부에서 이상한 비교를 하고 계시는군요.
char 배열을 이용한 문자열인 경우 == 연산자를 사용해서 내용의 동일성을 검사할 수는 없습니다.
내용의 동일성 검사는 strcmp 함수를 사용해야 합니다.
if (Item1=="SA") 의 뜻은 아래와 같습니다.
"Item1의 값인 번지가, 바로 여기 지정된, 문자열 SA가 저장된 번지와 같은가? 그렇다면..."
Item1의 문자열이 "SA"일지라도 두 문자열이 저장된 번지가 서로 다르다면 false가 되는것이지요.
Item1은 char 배열로 선언/정의된 것으로서 배열의 선두 번지를 값으로 갖습니다.
배열에 어떤 문자열이 들어 가더라도 Item1의 값(번지)은 변하지 않습니다.
한편, table 함수 내부에 있는 "SA"는 정적 문자열로서 컴파일/링크 시 Item1과는 또다른 위치에 저장되게 됩니다.
저장되는 위치(번지)가 다르다면 (Item1=="SA")의 결과는 당연히 false겠지요.
if (Item1=="SA")는 아래 두 줄로 풀어 쓸 수 있습니다.
char *psa = "SA";
if(Item1 == psa)
문자열이 같은지 비교하려면 아래와 같이 해야 합니다.
if(strcmp(Item1,"SA")==0)
아래 함수는 특수처리(?)를 하지 않는 이상 항상 0을 반환하게 됩니다.
int table(char *Item1)
{
int ExPoint=0;
if (Item1=="SA") ExPoint = 3460;
if (Item1=="MU") ExPoint = 9240;
if (Item1=="TZ") ExPoint = 5400;
if (Item1=="BZ") ExPoint = 2740;
return ExPoint;
}
참고로, 정보처리기사 합격만을 놓고 본다면 C/C++보다는 Visual Basic을 이용해서 실기를 치르는게 낫습니다.
VB는, 일단 개발환경이 잡다한 유저 인터페이스들을 해결해주고 시험장 PC에도 미리 설치되어 있습니다.
뚱뚜루 님이 쓰신 글 :
: 안녕하세영.
: 제가 정보처리 기사 시험준비를 할라고 C언어를 뚜닥거리는데
: 신기한것을 봤습니다.
: 소스코드를 올려놓겠습니다.
: 참조좀하시고 답변부탁드립니다.
: 정적변수(static)를 하면 답이 틀린데 정적변수를 안하면 답이 나오더라구영.
:
: 이유를 부탁드립니다.
:
: 132.c는 틀린답이고
: 13.c는 맞는답입니다.
: 틀린답의 Item1이라는함수 선언부에 static를 제거하면 답이 정상으로 나옵니다.
: 파일 패스를 맞게 고치신후에 작업하세요. 저는 정보처리공부하다한거라설
:
: 터보씨 3.0에서 작업함.
:
|