質問編集履歴

3

質問者の返信を元に「自分で一部書き換えたプログラム」を再度書き換えました。

2019/01/10 09:03

投稿

Akihiro_O
Akihiro_O

スコア20

test CHANGED
File without changes
test CHANGED
@@ -224,25 +224,29 @@
224
224
 
225
225
  {
226
226
 
227
- int i, j, k;
227
+ int i,j, k;
228
228
 
229
229
  char sex[16];
230
230
 
231
231
 
232
232
 
233
+
234
+
233
235
  do
234
236
 
235
237
  {
236
238
 
237
239
  printf("名前を入力してください:");
238
240
 
239
- scanf_s("%255s", &data->name,256);
241
+ scanf_s("%s", data->name,256);
240
-
242
+
241
- printf("%sでよろしいですか??(合ってます1、間違いました→2)\n",data->name);
243
+ printf("%sでよろしいですか??(合ってます」:「1」を入力間違いました」:「1以外」を入力)\n", data->name);
242
244
 
243
245
  scanf_s("%d", &i);
244
246
 
245
- } while (i == 2);
247
+ } while (i != 1);
248
+
249
+
246
250
 
247
251
  do
248
252
 
@@ -252,17 +256,19 @@
252
256
 
253
257
  scanf_s("%d", &data->age);
254
258
 
255
- printf("%dでよろしいですか??(合ってます1、間違いました→2)\n", data->age);
259
+ printf("%dでよろしいですか??(合ってます」:「1」を入力間違いました」:「1以外」を入力)\n", data->age);
256
260
 
257
261
  scanf_s("%d", &j);
258
262
 
259
- } while (j == 2);
263
+ } while (j != 1);
264
+
265
+
260
266
 
261
267
  do
262
268
 
263
269
  {
264
270
 
265
- printf("性別を入力してください(男性1、女性2):");
271
+ printf("性別を入力してください(男性」:「1」を入力女性」:「2」を入力):");
266
272
 
267
273
  scanf_s("%d", &data->sex);
268
274
 
@@ -274,19 +280,27 @@
274
280
 
275
281
  }
276
282
 
283
+ else if(data->sex == 2)
284
+
285
+ {
286
+
287
+ strcpy_s(sex, 16, "女性");
288
+
289
+ }
290
+
277
291
  else
278
292
 
279
293
  {
280
294
 
281
- strcpy_s(sex, 16, "女性");
295
+ continue;
282
296
 
283
297
  }
284
298
 
285
- printf("%sでよろしいですか??(合ってます1、間違いました→2)\n", sex);
299
+ printf("%sでよろしいですか??(合ってます」:「1」を入力間違いました」:「1以外」を入力)\n", sex);
286
300
 
287
301
  scanf_s("%d", &k);
288
302
 
289
- } while (k == 2);
303
+ } while (k != 1);
290
304
 
291
305
 
292
306
 
@@ -332,10 +346,10 @@
332
346
 
333
347
  }
334
348
 
349
+
350
+
335
351
  ```
336
352
 
337
-
338
-
339
353
  **「自分で一部書き換えたプログラム」**に穴や間違いがありましたら、教えて頂けると助かります。
340
354
 
341
355
 

2

名前を入力する部分のscanf_s関数の引数を変更しました。%s→%255s

2019/01/10 09:03

投稿

Akihiro_O
Akihiro_O

スコア20

test CHANGED
File without changes
test CHANGED
@@ -236,7 +236,7 @@
236
236
 
237
237
  printf("名前を入力してください:");
238
238
 
239
- scanf_s("%s", &data->name,256);
239
+ scanf_s("%255s", &data->name,256);
240
240
 
241
241
  printf("%sでよろしいですか??(合ってます→1、間違いました→2)\n",data->name);
242
242
 

1

コードブロックを採用しました。質問内容を一部追記しました。質問回答を受け、構造体内の変数宣言部でunsignedを使いました。

2019/01/07 10:24

投稿

Akihiro_O
Akihiro_O

スコア20

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,19 @@
6
6
 
7
7
 
8
8
 
9
+ #前提
10
+
11
+ 情報を入力する「InputPeople関数」内において、正しく入力されたか確認を取るために、著者の解答を一部書き換えました。
12
+
13
+ #実現したいこと
14
+
15
+ より安全で正確な(穴のない)プログラムが書けたらと思っています。
16
+
17
+
18
+
19
+
20
+
9
- ##問題
21
+ #問題
10
22
 
11
23
  「3人分の、名前、年齢、性別、を入力して表示するプログラムを作りなさい。
12
24
 
@@ -18,6 +30,8 @@
18
30
 
19
31
  #著者の解答
20
32
 
33
+ ```ここに言語を入力
34
+
21
35
  #include<stdio.h>
22
36
 
23
37
  #include<string.h>
@@ -140,10 +154,14 @@
140
154
 
141
155
 
142
156
 
157
+ ```
158
+
143
159
 
144
160
 
145
161
  #自分で一部書き換えたプログラム
146
162
 
163
+ ```ここに言語を入力
164
+
147
165
  #include<stdio.h>
148
166
 
149
167
  #include<string.h>
@@ -152,11 +170,11 @@
152
170
 
153
171
  {
154
172
 
155
- char name[256];
173
+ unsigned char name[256];
156
-
174
+
157
- int age;
175
+ unsigned int age;
158
-
176
+
159
- int sex;
177
+ unsigned int sex;
160
178
 
161
179
  }People;
162
180
 
@@ -186,6 +204,8 @@
186
204
 
187
205
  }
188
206
 
207
+
208
+
189
209
  for (i = 0; i < 3; i++)
190
210
 
191
211
  {
@@ -204,25 +224,71 @@
204
224
 
205
225
  {
206
226
 
207
- printf("名前:");
227
+ int i, j, k;
208
-
209
- scanf_s("%s", &data->name, 256);
228
+
210
-
211
- printf("年齢:");
229
+ char sex[16];
212
-
213
- scanf_s("%d", &data->age);
230
+
231
+
214
232
 
215
233
  do
216
234
 
217
235
  {
218
236
 
219
- printf("性別(1-男性、2-女性):");
237
+ printf("名前を入力してください:");
238
+
239
+ scanf_s("%s", &data->name,256);
240
+
241
+ printf("%sでよろしいですか??(合ってます→1、間違いました→2)\n",data->name);
242
+
243
+ scanf_s("%d", &i);
244
+
245
+ } while (i == 2);
246
+
247
+ do
248
+
249
+ {
250
+
251
+ printf("年齢を入力してください:");
252
+
253
+ scanf_s("%d", &data->age);
254
+
255
+ printf("%dでよろしいですか??(合ってます→1、間違いました→2)\n", data->age);
256
+
257
+ scanf_s("%d", &j);
258
+
259
+ } while (j == 2);
260
+
261
+ do
262
+
263
+ {
264
+
265
+ printf("性別を入力してください(男性→1、女性→2):");
220
266
 
221
267
  scanf_s("%d", &data->sex);
222
268
 
223
- } while (data->sex != 1 && data->sex != 2);
269
+ if (data->sex == 1)
270
+
224
-
271
+ {
272
+
273
+ strcpy_s(sex, 16, "男性");
274
+
275
+ }
276
+
277
+ else
278
+
279
+ {
280
+
281
+ strcpy_s(sex, 16, "女性");
282
+
283
+ }
284
+
285
+ printf("%sでよろしいですか??(合ってます→1、間違いました→2)\n", sex);
286
+
225
- //この部分を書き換えました。
287
+ scanf_s("%d", &k);
288
+
289
+ } while (k == 2);
290
+
291
+
226
292
 
227
293
  printf("\n");
228
294
 
@@ -244,10 +310,6 @@
244
310
 
245
311
  printf("年齢:%d\n", data.age);
246
312
 
247
-
248
-
249
-
250
-
251
313
  if (data.sex == 1)
252
314
 
253
315
  {
@@ -270,11 +332,7 @@
270
332
 
271
333
  }
272
334
 
273
-
335
+ ```
274
-
275
-
276
-
277
-
278
336
 
279
337
 
280
338