回答編集履歴

2

細かい補足

2023/04/19 10:15

投稿

otn
otn

スコア84572

test CHANGED
@@ -6,6 +6,7 @@
6
6
  「1234」という値として受け付けたいのなら、数字以外でもリセットしない。
7
7
 
8
8
  # コード例 追記
9
+ 上記の、「あと、」以降がちょっとおかしかったので、訂正含めてコードを書いてみます。
9
10
  `num`を配列にする意味が無いので、単純変数にしました。ソースは`indent -nut -br -ce`で整形しています。
10
11
  ```C
11
12
  #include <stdio.h>

1

コード例の追記

2023/04/19 10:13

投稿

otn
otn

スコア84572

test CHANGED
@@ -4,3 +4,55 @@
4
4
 
5
5
  あと、「123a4」のような入力の時にどうしたいかですね。これも「未入力です」にしたいのなら、数字以外が入力されたら、「有効な数字入力があったかどうかフラグ」を偽にリセットする。
6
6
  「1234」という値として受け付けたいのなら、数字以外でもリセットしない。
7
+
8
+ # コード例 追記
9
+ `num`を配列にする意味が無いので、単純変数にしました。ソースは`indent -nut -br -ce`で整形しています。
10
+ ```C
11
+ #include <stdio.h>
12
+
13
+ #define VALID 1
14
+ #define INVALID 2
15
+ #define UNDEF 0
16
+
17
+ int
18
+ main (void)
19
+ {
20
+ int c;
21
+ int i;
22
+ int num;
23
+ int Nmax = 0;
24
+ int is_number;
25
+
26
+ for(i = 0; i < 10; i++) {
27
+ while(1) {
28
+ num = 0;
29
+ is_number = UNDEF;
30
+ while((c = getchar ()) != '\n') {
31
+ if(c >= '0' && c <= '9') {
32
+ num = num * 10 + c - '0';
33
+ if(is_number == UNDEF) {
34
+ is_number = VALID;
35
+ }
36
+ } else {
37
+ is_number = INVALID;
38
+ }
39
+ }
40
+ if(is_number == VALID) {
41
+ break;
42
+ }
43
+ printf ("未入力または数字以外です\n");
44
+ }
45
+ if(num % 2 == 1) {
46
+ if(num > Nmax) {
47
+ Nmax = num;
48
+ }
49
+ }
50
+ }
51
+ if(Nmax > 0) {
52
+ printf ("最も大きい奇数: %d\n", Nmax);
53
+ } else {
54
+ printf ("奇数がありませんでした\n");
55
+ }
56
+ }
57
+ ```
58
+ 未入力とエラーでメッセージを変えたい場合は、`UNDEF`か`INVALID`かを判断します。