if문과 for문변환 조언부탁드립니다.
흰두루
질문 제목 : 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문같은것도 있는거같은데 그런것도 조언해주시면 정말 감사하겠습니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
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 |