回答編集履歴
2
誤字訂正
answer
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
printf("正しい日付を入力してください\n");
|
|
42
42
|
printf("記念日日付を入力してください");
|
|
43
43
|
scanf("%d",&day);
|
|
44
|
-
}else if(day>eachmonth[month-1]){
|
|
44
|
+
}else if(day>eachmonth[month-1]){ // 上の条件を満たさなかった場合、この条件もチェックされる。
|
|
45
45
|
printf("正しい日付を入力してください\n");
|
|
46
46
|
printf("記念日日付を入力してください");
|
|
47
47
|
scanf("%d",&day);
|
1
追記
answer
CHANGED
|
@@ -25,4 +25,45 @@
|
|
|
25
25
|
|
|
26
26
|
> ex3.c:37:9: error: 'break' statement not in loop or switch statement
|
|
27
27
|
|
|
28
|
-
break は、for や while などのループや、switch の中でしか使えません。if の中に break がありますが、if から break することはできません。(ループや switch の中に if があるなら、if の中に break を書けますが、その場合 if から break するのではなく、その外側にあるループなどから break することになります。)
|
|
28
|
+
break は、for や while などのループや、switch の中でしか使えません。if の中に break がありますが、if から break することはできません。(ループや switch の中に if があるなら、if の中に break を書けますが、その場合 if から break するのではなく、その外側にあるループなどから break することになります。)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
閏年の 2/29 の日付入力がうまくいかない件ですが、最初の if では 29 日は通りますが、最初の if の条件を満たさないので次の else if の条件もチェックされて、ここで引っかかってしまいます。
|
|
33
|
+
`else if (b != 0 && day > eachmonth[month - 1]) {` のように、else if でも b をチェックする必要があります。
|
|
34
|
+
|
|
35
|
+
```c
|
|
36
|
+
printf("記念日日付を入力してください");
|
|
37
|
+
scanf("%d",&day);
|
|
38
|
+
while(1){
|
|
39
|
+
int b=fx(year);
|
|
40
|
+
if(b==0 && day>lyeachmonth[month-1]){ //ありもしない日を打たれた時にエラーを出す
|
|
41
|
+
printf("正しい日付を入力してください\n");
|
|
42
|
+
printf("記念日日付を入力してください");
|
|
43
|
+
scanf("%d",&day);
|
|
44
|
+
}else if(day>eachmonth[month-1]){
|
|
45
|
+
printf("正しい日付を入力してください\n");
|
|
46
|
+
printf("記念日日付を入力してください");
|
|
47
|
+
scanf("%d",&day);
|
|
48
|
+
}else{
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
個人的には同じ scanf やエラーメッセージを何度も書きたくないので、次のように書くのが好みです。
|
|
55
|
+
|
|
56
|
+
```c
|
|
57
|
+
while (1) {
|
|
58
|
+
printf("記念日日付を入力してください");
|
|
59
|
+
scanf("%d", &day);
|
|
60
|
+
int b = fx(year);
|
|
61
|
+
if ((b == 0 && day <= lyeachmonth[month - 1]) ||
|
|
62
|
+
(b != 0 && day <= eachmonth[month - 1])) {
|
|
63
|
+
break; // 正しい日を入力されたので、ループを抜ける。
|
|
64
|
+
}
|
|
65
|
+
printf("正しい日付を入力してください\n");
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
ちなみに、西暦1年1月1日からの日数ですが、[ユリウス暦からグレゴリオ暦への切り替え](http://smartnova.net/blog/gregorian-shift/) (国によって違う) とかあるので、微妙かもしれません。
|