못 찾는 게 정상적인 경우로 보입니다.
==> 사실은 나름대로 소스를 이리 저리 바꾸어 보면서 테스트 햇는데 못찻앗읍니다
못찾는게 정상이엇군요.
그 책 본문의 소스와 부록 CD 의 소스는 같앗읍니다
저자가 제대로 테스트 안하고 책에 포함햇나 보네요
cc1232 님이 쓰신 글 :
: 못 찾는 게 정상적인 경우로 보입니다.
:
: if(find.str[i]==charStr) {
:
: 이런 구문은 문자열을 비교하는 것 같지만, 문자열을 비교하는 게 아니라 문자열의 주소값이 같은가 비교하는 것입니다
: 따라서 배열에 넣은 "computer"라는 문자열의 주소값과 별도로 비교한 "computer"라는 문자열의 주소값이 같으면 실행되고, 다르면 실행되지 않습니다. 두 문자열의 내용은 같습니다. 같은 내용이 두 군데의 메모리에 있는 것이죠
:
: 문자열의 내용이 같은가를 비교하시려고 한다면,
: 위에 #include <string.h>를 해주시고
: 이 부분 대신
: if(find.str[i]==charStr) {
: 이 부분을 넣어주세요
: if ( strcmp( find.str[i], charStr ) == 0 ) {
:
: strcmp는 두 문자열의 내용을 비교하는 함수로 같으면 0, 틀리면 0이외의 값이 나옵니다.
:
: chqh 님이 쓰신 글 :
: : main에서
: : find.FindView(300); 이 경우는 제대로 찾아주는데요
: : find.FindView("computer"); 를 찾지못하고 그냥 프로그램이 끝나고 말아요
: :
: : 어느 책 부록 CD의 프로그램을 재미로 돌려보다가 이해가 안되서
: : 이리 질문해봅니다
: :
: : ---------------------------------------------------------------------
: :
: : // Find.cpp : Defines the entry point for the console application.
: : //
: :
: : // #include "stdafx.h"
: : #include <iostream.h>
: :
: : class CFind
: : {
: : private:
: : int num[5];
: : char* str[5];
: : public:
: : CFind();
: : ~CFind();
: : void FindView(int number);
: : void FindView(char* charStr);
: : };
: :
: : CFind find;
: :
: : CFind::CFind()
: : {
: : find.num[0]=100;
: : find.num[1]=200;
: : find.num[2]=300;
: : find.num[3]=400;
: : find.num[4]=500;
: : find.str[0]="book";
: : find.str[1]="press";
: : find.str[2]="student";
: : find.str[3]="uni";
: : find.str[4]="computer";
: : }
: :
: : CFind::~CFind()
: : {
: : }
: :
: : void CFind::FindView(int number)
: : {
: : for(int i=0; i<5; i++)
: : if(find.num[i]==number) {
: : cout << "Found number.";
: : cout << find.num[i];
: : cout << "\n";
: : break;
: : }
: : }
: :
: : void CFind::FindView(char* charStr)
: : {
: : for(int i=0; i<5; i++)
: : if(find.str[i]==charStr) {
: : cout << "Found string.";
: : cout << find.str[i];
: : cout << "\n";
: : break;
: : }
: : }
: :
: : void main(void)
: : {
: : find.FindView(300);
: : find.FindView("computer");
: : }
|