본문 바로가기
C++

[C++] 명품 C++ 4장 찝어준거 정리

by Meaning_ 2022. 10. 14.
728x90
반응형

 

 

#2

 

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
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
 
int main() {
 
    int* arr = new int[5]; // 그냥 new int() 아니다 이놈아 
    //동적할당이면 new를 써주는거고 배열의 크기를 변수 또는 정수로 정해주긴해야함!!
    float avg = 0;
    cout << "정수 5개 입력>>";
    for (int i = 0; i < 5; i++) {
        int num;
        cin >> num;
        avg += num;
        arr[i] = num;
 
 
    }
 
    cout <<"평균 "<< avg / 5 << endl;
 
    delete[] arr;
 
}
cs

 

#4

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
 
class Sample {
 
    int* p;
    int size;
 
public:
    Sample(int n) {
        size = n;
        p = new int[n]; //n개 정수 동적배열 생성
    }
 
    void read(); //동적할당 받은 정수 배열 p에 사용자로부터 정수 입력 받음
    void write();//정수 배열 화면에 출력
    int big();//정수배열에서 가장 큰 수 출력 
    ~Sample();
};
 
void Sample::read() {
 
 
    for (int i = 0; i < size; i++) {
        
        cin >> p[i]; //이렇게 쓸 것!
 
    }
 
}
 
void Sample::write() {
    
    for (int i = 0; i < size; i++) {
        cout << p[i] << " ";
    }
    cout << endl;
 
}
 
int Sample::big() {
    int max = 0;
    for (int i = 0; i < size; i++) {
        if (max < p[i]) {
            max = p[i];
        }
    }
 
    return max;
}
 
Sample::~Sample() {
    delete[] p;
}
 
 
int main() {
    Sample s(10);
    s.read();
    s.write();
    cout << "가장 큰 수는 " << s.big() << endl;
 
}
cs

 

#5

cin.getline()은 cin의 멤버함수이며 띄어쓰기까지 포함하여 문자열로 저장할수있다.

char a[100];
cin.getline(a,100);

getline()은 <string>에 정의되어 있다.

string str;
getline(cin,str);

 

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
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
 
int main() {
    cout << "아래 한 줄을 입력하세요(exit를 입력하면 종료합니다.)" << endl;
 
    while (true) {
        string str;
        cout << ">>";
        getline(cin, str);
        if (str == "exit") {
            break;
        }
        else {
            cout << str << endl;
 
        }
 
    }
 
}
cs

 

 

#10

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
 
class Person {
    string name;
 
public:
    Person() {
    
        name = "";
 
    }
    Person(string name) {
        this->name = name;
 
    }
    string getName() {
        return name;
    }
    void setName(string name) {
        this->name = name;
        
    }
 
};
 
class Family {
 
    Person* p;
    int size;
 
public:
    Family(string name, int size);
    void show();
    void setName(int idx, string name);
    ~Family();
 
 
};
 
Family::Family(string name,int size) {
    this->size = size;
 
    this->= new Person[size];
 
};
void Family::show() {
    cout << "가족은 다음과 같이 " << size << "명 입니다." << endl;
    for (int i = 0; i < size; i++) {
        cout << p[i].getName() << "\t";
    }
    cout << endl;
 
}
 
void Family :: setName(int idx,string name) {
 
    p[idx].setName(name);
 
}
 
Family::~Family() {
    delete[] p; //꼭 delete[]여애! 
    //p라는 배열 소멸시키는거 main의 simpson이랑 다름!'
    //에러뜨면 포인터여도 배열 소멸시켰는지 확인해볼것 ! (포인터를 배열처럼 썼기 때문)
}
 
 
 
int main() {
 
    Family* simpson = new Family("Simpson"3);
    simpson->setName(0"Mr.Simpson");
    simpson->setName(1"Mrs.Simpson");
    simpson->setName(2"Bart Simpson");
    simpson->show();
 
    //여기서 왜 delete[]아닌지
    
    delete simpson;
}
cs

 

#14

 

💙 중요한거 💙

enter 감지하는거

GambleGame에서 실제로 모든 코드 실행하게 써야했음!

srand-> unsigned time null 기억!!

srand((unsigned)time(NULL))

 

정답지의 방법(enter 부분만 다름)

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// cppworkspace.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
//선수 
 
class Player {
 
private:
    string name;
    int score[3];
 
public:
    
 
    void setName(string name) {
        this->name = name;
 
    }
 
    string getName() {
        return name;
    }
 
    void getEnterKey() { // <Enter> 키가 입력되면 리턴
        char buf[100];
        cin.getline(buf, 99); // wait <Enter> key 
    }
    
    /*bool getEnterkey() {
        
        char c = cin.get();
        if (c == '\n') {
            return true;
        }
        return false;
    }*/
 
    int* getScore() {
 
        return score;
    }
 
 
    
 
 
 
};
 
class GamblingGame {
 
public:
 
    Player players[2];
 
    
 
    //게임
    GamblingGame() {
        srand((unsigned)time(NULL));
    }
 
    void run();
    
 
};
 
void GamblingGame::run() {
    cout << "**** 겜블링 게임을 시작합니다" << endl;
    string name;
    cout << "첫번째 선수 이름>>";
    getline(cin,name);
    players[0].setName(name);
    cout << "두번째 선수 이름>>";
    getline(cin, name);
    players[1].setName(name);
 
    int idx = 0;
    while (true) {
        cout << players[idx].getName() + ":<Enter>";
 
        players[idx].getEnterKey();
    /*    while (true) {
            if (players[idx].getEnterkey() == true) {
                break;
            }
        }*/
        for (int i = 0; i < 3; i++) {
            //rand()%(b-a+1)+a
            players[idx].getScore()[i] = rand() % 3;
            cout << players[idx].getScore()[i] << "\t";
        }
 
        int count = 0;
        int std = players[idx].getScore()[0];
 
        for (int i = 1; i < 3; i++) {
            if (std == players[idx].getScore()[i]) {
                count++;
            }
 
        }
 
        if (count == 2) {
            cout << players[idx].getName() << "님 승리!!" << endl;
            break;
        }
        else {
            cout << "아쉽군요!" << endl;
            idx = (idx + 1) % 2;
        }
 
    }
 
    
 
}
 
int main() {
    GamblingGame gamblingGame;
    gamblingGame.run();
    
 
 
    
 
    
 
 
 
}
cs

 

내가 다시 짠 방법(enter부분만 다름)

 

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// cppworkspace.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
 
#include <iostream>
#include<random>
#include<string>
#include<time.h>
#include<istream>
using namespace std;
 
 
//선수 
 
class Player {
 
private:
    string name;
    int score[3];
 
public:
    
 
    void setName(string name) {
        this->name = name;
 
    }
 
    string getName() {
        return name;
    }
 
    //void getEnterKey() { // <Enter> 키가 입력되면 리턴
    //    char buf[100];
    //    cin.getline(buf, 99); // wait <Enter> key 
    //}
    
    bool getEnterkey() {
        
        char c = cin.get();
        if (c == '\n') {
            return true;
        }
        return false;
    }
 
    int* getScore() {
 
        return score;
    }
 
 
    
 
 
 
};
 
class GamblingGame {
 
public:
 
    Player players[2];
 
    
 
    //게임
    GamblingGame() {
        srand((unsigned)time(NULL));
    }
 
    void run();
    
 
};
 
void GamblingGame::run() {
    cout << "**** 겜블링 게임을 시작합니다" << endl;
    string name;
    cout << "첫번째 선수 이름>>";
    getline(cin,name);
    players[0].setName(name);
    cout << "두번째 선수 이름>>";
    getline(cin, name);
    players[1].setName(name);
 
    int idx = 0;
    while (true) {
        cout << players[idx].getName() + ":<Enter>";
        while (true) {
            if (players[idx].getEnterkey() == true) {
                break;
            }
        }
        for (int i = 0; i < 3; i++) {
            //rand()%(b-a+1)+a
            players[idx].getScore()[i] = rand() % 3;
            cout << players[idx].getScore()[i] << " ";
        }
 
        int count = 0;
        int std = players[idx].getScore()[0];
 
        for (int i = 1; i < 3; i++) {
            if (std == players[idx].getScore()[i]) {
                count++;
            }
 
        }
 
        if (count == 2) {
            cout << players[idx].getName() << "님 승리!!" << endl;
            break;
        }
        else {
            cout << "아쉽군요!" << endl;
            idx = (idx + 1) % 2;
        }
 
    }
 
    
 
}
 
int main() {
    GamblingGame gamblingGame;
    gamblingGame.run();
    
 
 
    
 
    
 
 
 
}
cs

 

cin은 공백,개행 무시 

char c;
c=cin.get();

cin.get()을 사용하면 공백,개행 포함, 문자만 입력받음.

char a[10];
cin.getline(a,10);

cin.getline(변수의 주소, 최대 입력가능 문자수) 공백,개행 입력받음 문자열만 입력받음

cin.ignore() 입력 버퍼 내용 제거

728x90
반응형

댓글