수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

if문과 for문변환 조언부탁드립니다.

흰두루

2023.04.01

질문 제목 : c언어 야구게임 if문과 for문 switch문과 while문으로 바꾸기질문 요약 :함수변환질문 내용 : //---- #include 부분
#include stdio.h // 표준 입, 출력
#include stdlib.h // srande함수와 rand 함수를 사용하기 위해서
#include time.h // 랜덤숫자를 추출하기 위해서 시드를 초기화하기 위해서 사용
//---- 함수 선언부
void make_num();
void scan_check();
void print_all();
//---- 전역변수 선언부 ( 전역변수는 선언과 동시에 자동으로 0으로 초기화 됨 )
int num[3], player[20];
int strike[20], ball[20], trial;
//---- MAIN
int main()
{
// 화면에 출력
puts([숫자 야구 게임] \n0~9까지 숫자중 3자리 숫자를 선택하세요.\n 주어진 기회는 20회 입니다.);

// num[3]배열에 0~9까지의 랜덤 숫자를 생성한다 ( 즉 이게 답이 된다 )
make_num();
// 숫자를 입력받는다.
scan_check();
// 화면에 출력해준다.
print_all();

// 입력버퍼를 초기화 함
fflush(stdin);
// 화면을 잠시 멈춰 주기 위해 사용...(엔터 입력시 프로그램 종료)
getchar();
return 0;
}
//---- num[3]배열에 0~9까지의 랜덤 숫자 생성
void make_num()
{
int i;
// 시드값을 초기화한다( rand 함수 사용시 srand로 시드값을 초기화 안해주면 같은 숫자만 나온다 )
srand(time(NULL));

// 무한 반복문
while (1)
{
// 3번 반복문을 돌면서 랜덤 숫자 생성
for (i = 0; i 3; i++)
num[i] = rand() % 10;

// 만약에 num[3] 배열의 3개의 숫자가 같지 않으면은 무한루프를 빠져나간다
if (num[0] != num[1] && num[1] != num[2] && num[0] != num[2] && num[0] != 0)
break;
}
}
// 사용자로부터 숫자를 입력받는다.
void scan_check()
{
int i, j, k;
int check[3];
// 최대 시도수가 20이기때문에 20번 반복문을 돈다
for (i = 0; i 20; i++)
{
trial++; // 몇번이나 시도해 게임에 성공했는지 알수 있게 는 변수

// 숫자를 입력받는다.(3자리수)
printf(\n선택하신 3자리 수는 : );
scanf(%d, &player[i]);

// check[3] 배열에 3자리로 입력된 숫자를 하나하나씩 나누어서 저장한다
// 만약에 123을 입력했다면 check[0] = 1 , check[1] = 2 , check[2] = 3; 이렇게 되는것
check[0] = player[i] / 100;

check[1] = (player[i] % 100) / 10;
check[2] = player[i] % 10;

// 입력한 3개의 숫자중 같은 숫자가 있으면 다시 입력한다
if (check[0] == check[1] || check[1] == check[2] || check[0] == check[2] || check[0] == 0)
{
// 화면에 메세지 출력
printf(다시 입력해 주세요.);

// 게임 시도 수를 감소 시킨다
trial--;
i--; // 위 조건에 해당할 시에는 증가했던 i를 감소시켜서 다시 시도
}
else
{
for (j = 0; j 3; j++)
{
if (num[j] == check[j])
{
strike[i]++;
}
}
//사용자가 입력한 숫자중 랜덤으로 나온
//숫자와 위치와 값이 같으면 strike를
//증가시켜줍니다.

// 사용자가 입력한 수와 랜덤으로 나온 수 중 같은 수가 있으면 ball을 증가합니다.
for (j = 0; j 3; j++)
{
for(k = 0; k 3; k++)
{
if (num[j] == check[k])
ball[i]++;
}
}

ball[i] -= strike[i];
//ball은 자리가 같고 값이 같은 수도 포함되므로
//strike를 빼줘서 숫자만 같은 경우를 나타내게 합니다.

printf(Trial = %d\tStrike = %d\tBall = %d\n, trial, strike[i], ball[i]);

// 스트라이크가 3번이라면은 빠져나간다
if(strike[i] == 3) return;
}
}
// 스트라이크를 하지 못하면 화면에 메세지와 함께 정답을 출력해준다
printf(주어진기회동안 맞추질 못하였습니다\n);
printf(정답은 %d %d %d 입니다\n , num[0] , num[1] , num[2] ) ;
}
// 플레이어와 스트라이크 갯수 볼의 갯수를 전부다 출력해줍니다.
void print_all()
{
int i;
// 전체 시도한 횟수만큼 반복문을 돌면서 출력해준다
for (i = 0; i trial; i++)
{
printf(- [%d]: %d/S %d/B\n, i + 1, player[i], strike[i], ball[i]);
}
}
위의 야구게임을 찾아서for문을 while문으로 if를 switch문으로 바꿔야하는데
맨 첫번째 for문은 while문으로 바꿧더니
주어진 기회는 20회입니다
아래의 입출력문들이 도스창에 출력되지않아 많이 애먹고있습니다.
어떤식으로 바꿔야 자연스럽고 모든 입출력이 제대로 나오는지
조언좀 부탁드립니다.
그리고 중첩for문같은것도 있는거같은데 그런것도 조언해주시면 정말 감사하겠습니다.

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2698938 c언어 메모리질문 (3) 나래 2025-06-21
2698909 서비스 요청 고객 관리 프로그램 짜는것좀 도와주세요ㅜㅜ (4) 궁수자리 2025-06-21
2698882 프로그래밍좀 짜주세요 (3) 황예 2025-06-21
2698855 카프-라빈 알고리즘 코딩 분석좀 도와주세요.. 꽃봄 2025-06-20
2698829 학점계산기 (7) MyWay 2025-06-20
2698782 기초적인 함수 질문이요ㅠㅠㅠㅠ 내담 2025-06-20
2698749 프로그램 짜던 도중 패닉입니다...ㅜ 파랑 2025-06-19
2698719 조건부컴파일 질문입니다.~ (2) 큐트 2025-06-19
2698693 재귀 함수 에러 바닐라 2025-06-19
2698673 고민이있는데 들어좀주세요!! (1) 초코맛캔디 2025-06-19
2698644 1부터 n까지의 합을 구하는데 엄청긴숫자의 합을 구할때는 어떻게 해야하나요? (4) 슬우 2025-06-18
2698616 다른 함수로 안넘어갑니다..;;; 도1도캣 2025-06-18
2698587 배열하다 막혀서... (3) WhiteCat 2025-06-18
2698559 문자열을 비우는방법 (2) 하늘 2025-06-18
2698528 착하고 친절한 선생씌구해염~ㅋㅋ (4) 옆집언니야 2025-06-17
2698502 자료구조 큐 캔서 2025-06-17
2698477 실행화면 배경문의요 선아 2025-06-17
2698430 변수의 값이 저장이 않되네요;; (4) 피네 2025-06-16
2698404 C#을 배울려고 하는데 C나 C++을 알아야 하나요 ?? (1) 신당 2025-06-16
2698342 프로그램 질문점녀 (4) 데빌의눈물 2025-06-16
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com