#include <stdio.h>
void decrement_data(int *y, int *m, int *d){
*d -= 1;
if(*d == 0){
if(*m == 1){
*y -= 1; *m = 13; *d = 31;
}else if(*m == 3){
if(((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)){
*d = 29;
}else{
*d = 28;
}
}else if((*m == 5) || (*m == 7) || (*m == 10) || (*m == 12)){
*d = 30;
}else{
*d = 31;
}
*m -= 1;
}
}
void increment_data(int *y, int *m, int *d){
*d += 1;
switch(*m){
if(*m == 2){
if(((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)){
if(*d == 30){
*m += 1;
*d = 1;
}
}else{
if(*d == 29){
*m += 1; *d = 1;
}
}
}else if((*m == 4) || (*m == 6) || (*m == 9) || (*m == 11)){
if(*d == 31){
*m += 1;
*d = 1;
}
}else if(*m == 12){
if(*d == 32){
*y += 1;
}
}else{
if(*d == 32){
*m += 1;
*d = 1;
}
}
}
}
int main(){
int y, m, d;
printf("西暦何年何月何日ですか?(スペースで空けて入力):");
scanf("%d %d %d", &y, &m, &d);
decrement_data(&y, &m, &d);
printf("1日戻すと%d年%d月%d日です\n", y, m, d);
increment_data(&y, &m, &d);
increment_data(&y, &m, &d);
printf("1日進めると%d年%d月%d日で\n", y, m, d);
return 0;
}
y.c: In function ‘increment_data’:
返信削除y.c:25:12: warning: statement will never be executed [-Wswitch-unreachable]
if(*m == 2){
このようなエラーはどのように対処すればよいでしょうか。
error ではなく warn なので特に問題なく実行できると思いますが, どのようなコードを書いているかわからないのですが, main の方で increment_data を呼んでないから increment_data が実行されないよ という warning が出ている感じでしょうか...
削除年末年始の日付でバグってたので修正しました
返信削除void increment_data(int* y, int* m, int* d) {
*d += 1;
if (*m == 2) {
if (((*y % 4 == 0) && (*y % 100 != 0)) || (*y % 400 == 0)) {
if (*d == 30) {
*m += 1;
*d = 1;
}
}
else {
if (*d == 29) {
*m += 1; *d = 1;
}
}
}
else if ((*m == 4) || (*m == 6) || (*m == 9) || (*m == 11)) {
if (*d == 31) {
*m += 1;
*d = 1;
}
}
else if (*m == 12) {
if (*d == 32) {
*y += 1;
*m = 1;
*d = 1;
}
}
else {
if (*d == 32) {
*m += 1;
*d = 1;
}
}
}