Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2496] Re:정보처리 -C언어 질문
실업자 [origin] 1062 읽음    2003-04-29 22:35
이건 변수를 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에서 작업함.
:

+ -

관련 글 리스트
2495 정보처리 -C언어 질문 뚱뚜루 1006 2003/04/29
2496     Re:정보처리 -C언어 질문 실업자 1062 2003/04/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.