回答編集履歴

6

指摘追加

2020/12/18 10:42

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -77,3 +77,21 @@
77
77
  }
78
78
 
79
79
  ```
80
+
81
+
82
+
83
+ ---
84
+
85
+ `getKeyDown()`を二回呼んでいますが、`ReadConsoleInput()`も2回呼ばれるので取りこぼしてしまうのでは?
86
+
87
+ `ReadConsoleInput()`で読み取った値を覚えておき`KeyCode::UP_KEY`か`KeyCode::UP_KEY`か判定すべきでは?
88
+
89
+ ```C++
90
+
91
+ if (key->getKeyDown(KeyCode::UP_KEY) == true)
92
+
93
+ (略)
94
+
95
+ else if (key->getKeyDown(KeyCode::DOWN_KEY) == true)
96
+
97
+ ```

5

コード追記

2020/12/18 10:42

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -15,3 +15,65 @@
15
15
  Length = sizeof(INPUT_RECORD);
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ ---
22
+
23
+ 以下のように修正し
24
+
25
+ ```diff
26
+
27
+ - if (ReadConsoleInput(handle, Buffer, Length, &lpNumber) != 0)
28
+
29
+ + INPUT_RECORD Buffer;
30
+
31
+ + if (ReadConsoleInput(handle, &Buffer, 1, &lpNumber) != 0)
32
+
33
+ {
34
+
35
+ fprintf(fp, "あああ\n");
36
+
37
+ /////////////////////////////////////////////////////////////////////////
38
+
39
+ - if (Buffer->Event.KeyEvent.bKeyDown == true) {
40
+
41
+ + if (Buffer.Event.KeyEvent.bKeyDown == true) {
42
+
43
+ - if (Buffer->Event.KeyEvent.wVirtualKeyCode == (int)key && b == false)
44
+
45
+ + if (Buffer.Event.KeyEvent.wVirtualKeyCode == (int)key && b == false)
46
+
47
+ ```
48
+
49
+ 以下のコードで上矢印キーを押下した場合に"`UP`"が表示されることを確認しました。
50
+
51
+ ```C++
52
+
53
+ int main()
54
+
55
+ {
56
+
57
+ KeyInput key(GetStdHandle(STD_INPUT_HANDLE));
58
+
59
+
60
+
61
+ while (true)
62
+
63
+ {
64
+
65
+ if (key.getKeyDown(KeyCode::UP_KEY))
66
+
67
+ {
68
+
69
+ printf("UP\n");
70
+
71
+ }
72
+
73
+ }
74
+
75
+ return 0;
76
+
77
+ }
78
+
79
+ ```

4

文言修正

2020/12/18 10:30

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- `Length`はバイト数ではなく、入力レコード数なので`1`では?
11
+ [ReadConsoleInput](https://docs.microsoft.com/en-us/windows/console/readconsoleinput)の第3引数は第2引数の要素数なので`Length`は`sizeof(INPUT_RECORD)`ではなく`1`では?
12
12
 
13
13
  ```
14
14
 

3

文言修正

2020/12/18 10:01

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -3,6 +3,10 @@
3
3
 
4
4
 
5
5
  ---
6
+
7
+ > INPUT_RECORD Buffer;としまた。そしたらエラー番号6番[ハンドルが無効です]と表示されるのですがどうすればいいのでしょうか?
8
+
9
+
6
10
 
7
11
  `Length`はバイト数ではなく、入力レコード数なので`1`では?
8
12
 

2

文言修正

2020/12/18 09:54

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ---
6
6
 
7
- ッファのバイト数ではなく、入力レコード数なので`1`では?
7
+ `Length`はバイト数ではなく、入力レコード数なので`1`では?
8
8
 
9
9
  ```
10
10
 

1

指摘追加

2020/12/18 09:51

投稿

SHOMI
SHOMI

スコア4079

test CHANGED
@@ -1 +1,13 @@
1
1
  `Buffer`が`nullptr`のままどこでも確保していないようです。
2
+
3
+
4
+
5
+ ---
6
+
7
+ バッファのバイト数ではなく、入力レコード数なので`1`では?
8
+
9
+ ```
10
+
11
+ Length = sizeof(INPUT_RECORD);
12
+
13
+ ```