프로그래밍

 3198, 1/160 회원가입  로그인  
   tabris1102
   랜덤함수 0이 가끔 출력되는데..

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6389 [복사]


#include <iostream>
#include <cstdlib>

using namespace std;

int dealCard(void);
int main()
{
        char cards[] = {'A','2','3','4','5','6','7',
                          '8','9','10','J','Q','K'};

        srand(time(NULL));

        cout << cards[dealCard()] << endl;
        cout << cards[dealCard()] << endl;
        
}
int dealCard(void)
{
        return rand() % 13;
}


여기서 함수를 보시면 0 ~ 13 까지 숫자가 나오잖아요?
그래서 그 숫자를 cards[] 안에 집어넣기 때문에 0 이 나오면
cards[0] = A 가 나옵니다. 그런데 가끔가다 그냥 0 이 출력 될떄가 있어요.

혹시나 해서 (rand() % 13) + 1 도 해봤지만 그래도 0이 가끔 출력되더라구요.
이유가 뭔가요?

  Hit : 4888     Date : 2013/10/07 02:37



    
Chris Ruiel return rand() % 13;
과

return rand() % 13+1;

은 다르시다는걸 아시지요..??

첫번째는 0~ 두번째는 1~부터 이지요..

그냥 0이 출력된다는건 출력에 cards[0] A가 아니라 0만 출력된다는 말씀이시지요?
2013/10/07  
janeeyoon char cards[] = {'A','2','3','4','5','6','7',
'8','9','10','J','Q','K'}

이 부분에서 char type 변수에 '10'을 대입시키고 있네요. 10 이라는 숫자는 엄연히 1과0 두 개로 이루어진 두글자이고 2바이트...
대입된 결과는 cards[9]='0' 이 되겠네요. 그러니 결국 0 이 출력된다는게 이걸 말하는 것 같네요.
2013/10/08  
tabris1102 Chris Ruiel// A는 출력이 되요 그런데 어디선지 모르겠지만 0이 출력 되더라구요.
janeeyoon// 음.. 한 가지 궁금한건, 만약 10을 1과 0으로 본다면 rand()%13 의 경우 A부터 Q 까지 나와야 하는거죠?
그런데 K도 나오더라구요....... 한 번 알아보도록 하겠습니다.!
2013/10/09  
G.O.D 문자열의 끝을 알리기 위해 배열의 마지막에는 \0이 들어가게 되는데 저게 정수형으로 표현되면 0이됩니다.

랜덤 함수로 위에 처럼 돌릴경우 13 이라는 숫자도 나오게 되고 card[13]은 배열의 마지막, 즉 0이 됩니다.

rand()%12 +0 이렇게 바꿔 주시면 0~12까지의 정수가 나오게 되고 cards[0]~card[12]까지 정해진 문자가 랜덤으로

출력 됩니다.
2013/11/11