ehiehi
61
2019-06-20 00:36:06
2
952

왜 홀수일떄 짝수로 나올때가 있을까요...


#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<time.h>


int main(int argc, char*argv[])

{

int i;

int bat;


if (argc != 2) {

printf("사용법 : 실행파일 홀짝\n");

printf("예시 : toto 홀");

}

if (strcmp(argv[1],"홀") == 0)

{

printf("당신은 홀수를 선택했습니다. 얼마나 배팅할 것인가요?");

scanf("%d", &bat);

srand((int)time(NULL));

if ((rand(time)%2) == 0)

printf("답은 짝수 %d입니다. 당신은 %d원을 잃었습니다.\n", rand(time), bat);

else 

printf("답은 홀수 %d입니다. 당신은 %d원을 얻었습니다.\n", rand(time), bat);

printf("\n도박은 나쁜 행동임을 명심하세요.");

}

else if (strcmp(argv[1],"짝") == 0)

{

printf("당신은 짝수를 선택했습니다. 얼마를 배팅할 것인가요?");

scanf("%d", &bat);

if ((rand(time)%2) == 0)

printf("답은 짝수 %d입니다. 당신은 %d원을 얻었습니다.\n", rand(time), bat);

else 

printf("답은 홀수 %d입니다. 당신은 %d원을 잃었습니다.\n", rand(time), bat);

printf("\n도박은 나쁜 행동임을 명심하세요.");

}

}


가끔 잘못나오는데 왜이런가요 시간으로 받은 랜덤값이 잘못되었나요..?

0
  • 댓글 2

  • 스텁
    2k
    2019-06-20 02:15:46 작성 2019-06-20 02:20:24 수정됨

    (rand(time)) 이걸 변수에 저장하고 쓰세요. if문에 있는거랑 printf문에 있는거랑 time값이 조금이라도 달라질수 있으니 그런거겠네요.


    그리고 if (strcmp(argv[1],"홀") == 0) 이거랑 else if (strcmp(argv[1],"짝") == 0) 이거 없애버리시고 

    printf("당신은 %s수를 선택했습니다. 얼마를 배팅할 것인가요?", argv[1]); 만 하셔도 코드길이 줄겠네요.


    DRY(Do Not Repeat Yourself)는 코딩하면서 계속 명심해야 되는 사항입니다. 



  • Hide_D
    478
    2019-06-21 15:53:44 작성 2019-06-21 15:54:02 수정됨

    (1) rand함수는 인자를 받지 않고, rand() 로 사용합니다. warning 대잔치였겠군요!

    (2) rand함수는 호출할때마다 숫자가 바뀝니다. 각각 두차례 호출하니 다를 확률이 50%였겠네요.

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.