메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C++ 프로그래밍

뇌를 자극하는 C++ 프로그래밍 질의응답 게시판입니다.

cin.getline()함수를 쓰면서

2007-12-04

|

by 박상현

3403

안녕하세요 박상현입니다
getline를 사용하면서 아리송한점이 많아서 질문을드립니다
질문만봐서는 이게뭐지하는부분이 생기실까봐 작성한 코드를 첨가했습니다
그냥보시는것보다 컴파일러에 붙여넣으시면 보시기편하십니다
///////////////////////////////////////질문내용//////////////////////////////////////////////
getline()함수로 배열의 주소를 넘겨받는다

근데 이때 두번째 파라미터를 넘겨받는 문자열의 길이만큼 딱

주면 ..원하는 결과를 얻을 수 없다..

1. 최소 +2만큼 더 해줘야지 정상적인결과가 나온다..왜그런것인가..

그리고!

2. 문자열로 통째로 입력받은것과 문자 하나하나 입력받은것은

각각의 배열값이 다르다 그래서 +48을 더해준다



3. char arr[3] = {0, 1, 2};와 arr[0] = 0 arr[1] = 1 arr[2] 를했을때

초기화문법은 NULL이들어가고 두번째경우는 NULL이않들어간다



그렇다고 초기화문법이 char arr[3] = "012" 식으로들어간것도아닌데 왜 문자열처럼 자동으로 NULL이 들어가는가?

//////////////////////////////////////////////////////////////////////////////////////////////////













#include "iostream.h"
#include "time.h"
#include
#include
void main(void)
{
        char Carr[10];
        char Uarr[10];
        int i, j;
        int b = 0, s = 0;
        cout << "baseBall 입니다" << endl;

        //컴퓨터가 세자리숫자 생성
        do
        {
                for(i = 0; i < 3; i++)
                {

                
                        Carr[i] = rand() % 10  + 48;//같은 char배열인데도 48을 더해줘야한다
                }                                                                //문자열로 받는것이랑 따로따로 받는것이랑 다른것인가?        
        } while(Carr[1] == Carr[0] || Carr[1] == Carr[2] || Carr[2] == Carr[0]);

        
        Carr[3] = NULL;// << ==이놈은 NULL을 안해줘도된다..자동으로 들어가는건가??
        Uarr[3] = NULL;// 쓰지않는 마지막 부분에 0으로 즉 NULL로 채워줘서 두배열이 완전 같게 해준다
        // 이렇게 해주지 않는다면 ex)유저의 입력값이 1개 더 커야한다
        
        cout << strlen(Carr) << endl;
        cout << strlen(Uarr) << endl;
        

        //내가 숫자 입력
        while(1)
        {

        
                cin.getline(Uarr, strlen(Carr)+2);//왜 strlen을 원래값보다 2씩이나 넉넉히 줘야하는가 넉넉히안주면 원하는값이않나온다
                
        
                for(i = 0; i < 3; i++)
                {
                        for(j = 0; j < 3; j++)
                        {
                                if(Carr[i] == Uarr[j])
                                {
                                        b++;//볼을 증가
                                        if(Carr[i] == Uarr[i])
                                        {
                                                b--;//볼과 동시에 스트라이크이기때문에 볼을 증가시킨뒤 감소시킨다
                                                s++;//스트라이크증가
                                        }

                                }
                        }
                }
                cout << b << "볼" << s << "스트라이크" << endl;
                //다음 연산을위해 볼,스트라이크를 초기화시킨다
                b = 0;
                s = 0;


                //문자열직접비교
                cout << "==================Test===============" << endl;
                cout << "Uarr[0]" << Uarr[0] << endl;                
                cout << "Carr[0]" << (Carr[0] - 48) << endl;
                cout << "답은   " << (*Carr)-48 << *(Carr+1)-48 << *(Carr+2)-48  << endl;  
                int p = strcmp(Uarr, Carr);     //이놈은 주소안에 들어있는 문자열을 비교한다
                //int p = Uarr == Carr ? 0 : -1;//이놈은 서로의 주소를 비교하게된다 당연히 틀릴수밖에..
                cout << p << endl;
                cout << "=====================================" << endl;


        }


        //두숫자비교결과출력


}
댓글 입력
자료실