質問編集履歴

1

より具体的に書き直しました。

2020/07/29 08:24

投稿

gyoruo
gyoruo

スコア61

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,22 @@
1
- 決められた範囲内の座標を取得して表示するプログラムを作成したいのですが、うまくいきません
1
+ 決められた範囲内の座標を取得して表示するプログラムを作成したいのです。
2
-
3
- 配列に2バイト文字のAなどを入れて判定させたいのですが、どのようにすればよいでしょうか?
4
2
 
5
3
  scanfを使う手も考えましたが、オーバーラン対策も入れたいので、できればfgetsを使いたいです。
4
+
5
+
6
+
7
+ 理想としては、A1を入力すると、入力された値は、A1です。と表示させたいです。
8
+
9
+
10
+
11
+ 現状は、((xy[0] && xy[1]) = 'A'))の部分でエラーが出ています。Aは半角英字で2バイト用いるのでxy[0]とxy[1]の2つでAが形成されていると考えていますが、この考え方で合っているのでしょうか?
6
12
 
7
13
 
8
14
 
9
15
  ```C
10
16
 
11
17
  #include <stdio.h>
18
+
19
+ #include "type.h"
12
20
 
13
21
 
14
22
 
@@ -24,7 +32,7 @@
24
32
 
25
33
 
26
34
 
27
- printf("座標(A~D,1~4)を入力してください(例:A1)");
35
+ printf("座標(A,1~4)を入力してください(例:A1, A2)");
28
36
 
29
37
 
30
38
 
@@ -32,23 +40,37 @@
32
40
 
33
41
  fgets(xy, MAXDATA, stdin);
34
42
 
35
- if (xy[4] == '\n') {
43
+ if (xy[3] == '\n') {
36
44
 
37
- if ((xy[0] > '0') && (xy[0] < '5') || xy[2] = 'A' || 'B' || 'C' || 'D') {
45
+ if ((((xy[2] > '0') && (xy[2] < '5')) || ((xy[0] && xy[1]) = 'A'))) {
38
46
 
39
47
  flag = 1;
48
+
49
+ } else {
50
+
51
+ printf("範囲外の入力です。もう一度入力してください。\n");
40
52
 
41
53
  }
42
54
 
43
55
  } else {
44
56
 
57
+ if (strchr(xy, '\n') == NULL) {
58
+
59
+ while(fgetc(stdin) != '\n');
60
+
61
+ }
62
+
45
- printf("値が大きすぎます。もう一度入力してください。");
63
+ printf("値が大きすぎます。もう一度入力してください。\n");
46
64
 
47
65
  }
48
66
 
49
67
  }
50
68
 
69
+
70
+
51
-
71
+ printf("入力された値は、%sです。\n", xy);
72
+
73
+
52
74
 
53
75
  return 0;
54
76
 
@@ -56,4 +78,6 @@
56
78
 
57
79
 
58
80
 
81
+
82
+
59
83
  ```