반응형

6.12> 겜블링 게임을 만들어보자. 두 사람이 게임을 진행한다. 두 사람의 이름은 처음에 키보드를 통해서 입력 받는다. 게임에 참여하는 사람은 Person클래스로 작성하도록 하라. 각 사람이 번갈아 가면서 게임을 진행한다. 각 사람이 자기 차례에서 <Enter> 키를 입력하면 프로그램은 3개의 난수를 발생시키고 이 3개의 숫자가 모두 같은 지 판단한다. 동일하다면 승자가 되며 게임을 끝낸다. 게임은 끝날 때까지 두 사람이 번갈아 가면서 진행한다. 숫자의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 편리를 위해 숫자의 범위는 0~3까지만 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package SecondHW;
import java.util.*//스캐너 사용 위한 임포트
class Person{String name;} //Person 클래스와 그 원소 문자열 name
public class Gembling {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in); //스캐너객체 s
        Person p1=new Person(); //Person 객체 를가리키는 레퍼런스 변수 p1
        Person p2=new Person(); //Person 객체 를가리키는 레퍼런스 변수 p2
        int rand[]= new int[3]; //사이즈3의 인트형 배열 rand
        int round=1//int형변수 round 선언 및 1로 초기화
        int who=0//int형변수 who 선언 및 0으로 초기화
        System.out.print("플레이어1의 이름을 입력하세요: ");
        p1.name=s.nextLine(); //p1.name을 nextLine으로 받음(개행문자 미포함)
        System.out.print("플레이어2의 이름을 입력하세요: ");
        p2.name=s.nextLine();//p2.name을 nextLine으로 받음(개행문자 미포함)
        while(true){
            who=round%2//who는 round를 2로나눈 나머지 즉 홀수면 p1, 짝수면 p2
            if(who==1){
                System.out.print(p1.name + "님 차례입니다. 엔터 입력>>");
            }
            else if(who==0){
                System.out.print(p2.name + "님 차례입니다. 엔터 입력>>");
            }
            String check=s.nextLine(); //문자열 check를 nextLine으로 받음(nextLine은 개행 미포함)
            //즉 엔터만 치면 빈 문자열이 됨.
            if(check.isEmpty()){  // isEmpty : 스트링길이0이면true, 아니면 false
                for(int i=0;i<3;i++//3번 반복
                {    rand[i]=(int)(Math.floor(Math.random()*4)); 
                // 균일한 확률을 위해 곱하기 4한 후 내림 사용
                    System.out.print(rand[i]+" ");} //각 원소 출력
                System.out.println();} //3개 출력후개행문자 출력
            if((rand[0]==rand[1])&&(rand[1]==rand[2])) //0번,1번,2번 원소가 전부 같으면
            {if(who==1){ //p1일때
                System.out.println(p1.name+"님의 승리입니다 축하합니다!" );
                break;} //승리축하문자 출력후 루프 탈출
            else if(who==0){//p2일때
                System.out.println(p2.name+"님의 승리입니다 축하합니다!" );
                break;}} //승리축하문자 출력후 루프 탈출
            round++//승리하지못했을시 round증가시키고 루프 반복
        }}}
 
cs






반응형

'컴퓨터 & 프로그래밍 & 전자공학 > JAVA' 카테고리의 다른 글

학점 계산  (0) 2017.06.19
가장 큰 수  (0) 2017.06.19
가위바위보  (0) 2017.06.19
대문자 개수 세기  (0) 2017.06.19
메소드 오버라이딩  (0) 2017.06.18
반응형

fgets 함수는 개행문자가 (\n) 나올 때까지 문자열을 받아준다.

그런데 중요한 것은 예를들어 Hi World 를 입력하고 엔터를 쳤다고 치면

Hi World\0 이아니라

Hi World\n\0 이 받아진다는 것이다. 이것을 잘 알아야 한다.



\n : 개행문자

\0 : 문자열의 긑을 나타냄 (null 문자)


char *fgets(char *str, int num, FILE *stream);


스트림에서 문자열을 받아서 num-1 개의 문자를 입력 받을 때 까지나 개행 문자(\n) 나 파일의 끝(EOF)에 도달할 때 까지

입력 받아 문자열로 저장한다.

NULL문자는 자동으로 문자 뒤에 붙기 때문에 num-1 개의 문자이다.

마지막에 치는 엔터는 \n 의 형태로 문자열에 포함된다 주의!!


예제 ( 내가만든 것임)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
int main(void)
{
    FILE *fp=NULL;
    char a[5];
    fp=fopen("4.txt","r");
    while(1)
    {
    if(feof(fp)!=0)
        break;
    fgets(a,sizeof(a),fp);
    printf("%s\n",a);
    }
    return 0;
}
cs

배열 a의 크기가 5이기 때문에 실제로 \0을 제외하면 4개의 문자가 들어갈 수 있다.

아래 텍스트 파일을 실제로 나타내보면

abcdefgh\nidonthave\nhave\nfuckyoumuc 이다.

따라서

abcd\0efgh\0\n\0idon\0thav\0e\n\0have\0\n\0fuck\0youm\0uc\0

가 되고 printf 자체에도 개행문자를 넣어줬기 때문에


다음과 같은 결과가 나오는 것이다.


마지막 줄에 개행문자가 왜 없냐면 파일 포인터가 아랫줄로 내려가지 않았기 때문이다...


반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

성적 평균 구하기  (0) 2017.02.12
텍스트 파일 비교  (0) 2017.02.11
파일 복사  (0) 2017.01.31
대문자로 변경  (0) 2017.01.31
텍스트 파일 비교  (0) 2017.01.31

+ Recent posts