質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

2300閲覧

コンパイルするとwarningが出ます。これをなくすにはどうしたらいいでしょうか

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/03/31 12:05

list12.cをコンパイルするとwarningが出ます。これをなくすにはどうしたらいいでしょうか
実行は正常動作しています。閏年かどうかのコードのところです。
よろしくお願いいたします。

naka@naka ~/chap06
$ gcc -o list6_12 list6_12.c -Wall
list6_12.c: In function 'is_leap':
list6_12.c:15:20: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;

/* 日付を扱うプログラム */ #include <stdio.h> /*--- 日付 ---*/ struct date { int year; /* 年 */ int month; /* 月 */ int day; /* 日 */ }; /*--- y年は閏年か? ---*/ int is_leap(int y) { return y % 4 == 0 && y % 100 != 0 || y % 400 == 0; } /*--- y年m月の日数 ---*/ int day_of_month(int y, int m) { int mdays[][12] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, /* 平年 */ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, /* 閏年 */ }; return mdays[is_leap(y)][m - 1]; } /*--- 日付を表示 ---*/ void print_date(struct date d) { int wday; /* 曜日 */ int y = d.year; int m = d.month; char *ws[] = {"日", "月", "火", "水", "木", "金", "土"}; if (m == 1 || m == 2) { y--; m += 12; } wday = (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d.day) % 7; printf("%04d年%02d月%02d日(%s)", d.year, d.month, d.day, ws[wday]); } /*--- 日付を読み込む ---*/ void scan_date(struct date *d) { printf("年 : "); scanf("%d", &d->year); do { printf("月 : "); scanf("%d", &d->month); } while (d->month < 1 || d->month > 12); do { printf("日 : "); scanf("%d", &d->day); } while (d->day < 1 || d->day > day_of_month(d->year, d->month)); } /*--- 日付を1日進める ---*/ void succeed(struct date *d) { if (d->day < day_of_month(d->year, d->month)) d->day++; else { if (++d->month > 12) { d->year++; /* 年の繰上げ */ d->month = 1; } d->day = 1; /* 翌月の1日 */ } } /*--- 日付を1日戻す ---*/ void precceed(struct date *d) { if (d->day > 1) d->day--; else { if (--d->month < 1) { d->year--; /* 年の繰下げ */ d->month = 12; } d->day = day_of_month(d->year, d->month); /* 前月の最終日 */ } } /*--- 日付をn日進める ---*/ void succeedn(struct date *d, int n) { void precceedn(struct date *d, int n); if (n < 0) precceedn(d, -n); else if (n > 0) { int dom; d->day += n; while (d->day > (dom = day_of_month(d->year, d->month))) { d->day -= dom; if (++d->month > 12) { d->year++; d->month = 1; } } } } /*--- 日付をn日戻す ---*/ void precceedn(struct date *d, int n) { if (n < 0) succeedn(d, -n); else if (n > 0) { d->day -= n; while (d->day < 1) { if (--d->month < 1) { d->year--; d->month = 12; } d->day += day_of_month(d->year, d->month); } } } int main(void) { int menu; struct date x = {2017, 12, 15}; /* 2017年12月15日 */ while (1) { int n; printf("日付…"); print_date(x); putchar('\n'); printf("1) 日付読込み 2) 1日進める 3) 1日戻す " "4) n日進める 5) n日戻す 6) 終了:"); scanf("%d", &menu); if (menu < 1 || menu >= 6) break; switch (menu) { case 1: scan_date(&x); break; /* 日付読込み */ case 2: succeed(&x); break; /* 1日進める */ case 3: precceed(&x); break; /* 1日戻す */ case 4: case 5: printf("何日:"); scanf("%d", &n); if (menu == 4) succeedn(&x, n); /* n日進める */ else precceedn(&x, n); /* n日戻す */ break; } } return 0; } 実行結果 naka@naka ~/chap06 $ gcc -o list6_12 list6_12.c -Wall list6_12.c: In function 'is_leap': list6_12.c:15:20: warning: suggest parentheses around '&&' within '||' [-Wparentheses] return y % 4 == 0 && y % 100 != 0 || y % 400 == 0;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

int is_leap(int y)
{
return ((y % 4 == 0 && y % 100 != 0 )|| y % 400 == 0);
}

とカッコでくくりました。

投稿2018/03/31 12:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問