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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

2回答

4333閲覧

C言語コンパイルエラー。型について

yu3sukei22

総合スコア8

C

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2021/05/13 16:42

c

1#include <stdio.h> 2#include <math.h> 3int calc_a(int year,int manth,int day){ 4 int manthdays[]={0,31,59,90,120,151,181,212,243,273,304,334}; 5 int days = (year-1)*365+((year/4)-(year/100)+(year/400))+(manthdays[manth-1])+day; 6 return days; 7} 8 9int main(void){ 10 int year,manth,day,days; 11 printf("西暦を入力してください"); 12 scanf("%d",year); 13 printf("月を入力してください"); 14 scanf("%d",manth); 15 printf("日付を入力してください"); 16 scanf("%d",day); 17 days=0; 18 days=calc_a(year,manth,day); 19 printf("%d年%d月%d日は西暦1年1月1日から%d日経っています",year,manth,day,days); 20 return 0; 21}

閏年を考えた西暦1年1月1日からの日数計算のプロフラミングを書こうとしています。
とりあえず作ってコンパイルしたところ

1419003.c:12:16: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat] scanf("%d",year); ~~ ^~~~ 1419003.c:14:16: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat] scanf("%d",manth); ~~ ^~~~~ 1419003.c:16:16: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat] scanf("%d",day); ~~ ^~~ 3 warnings generated.

というエラーコードが出ました。warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]というエラーコードの意味がわかりません。変数は全てint型にしているのにエラーが出ます。どう対処すればいいでしょうか

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

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

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

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

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

guest

回答2

0

scanf("%d", &year); のようにして、変数 year のアドレスを scanf に渡せば
読み込んだ数字の列を int の値に変換して、変数 year に入れてくれるでしょう。

manth や day も同様ですが、そのように修正しても、閏年てある 2020年で、
2020 2 29 と 2020 3 1 が同じ「737485日経っています」になりますよ。

それから manth は month にしましょう。

投稿2021/05/13 18:02

kazuma-s

総合スコア8224

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

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

yu3sukei22

2021/05/13 19:24

スペルミスすいません... それを解決しようとして新しいコードを作ったのですがまたエラーが起きました。。別の質問にしたのでもしよろしければ見ていただけると幸いです。
guest

0

そのワーニングの意味は
「関数で定義されている引数の型は"int*"なのに"int"型が指定されている」
という内容です。

scanf()の第2引数は"int*"型です。(要はポインタ)
ですので、それら3つの引数をポインタ型に変えればいいのです。

投稿2021/05/13 17:15

rinjinto

総合スコア170

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

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

rinjinto

2021/05/13 17:19 編集

メッセージを日本語に翻訳すれば意味はわかると思います。 難しい英語ではないので、エラーメッセージの翻訳はできるようになった方がいいと思います。 また、そのエラーメッセージをインターネット上で探せばいくらでも意味は出てくると思います。
yu3sukei22

2021/05/13 17:36

関数の中でポインタを宣言したつもりはないのに勝手にポインタに変換されているということですか? ポインタについての知識不足ですいません。
rinjinto

2021/05/13 17:48

そうではなく、scanfという関数で必要なのがポインタなのです。 記載のコードではscanfにポインタではなく実体を指定しています。 その点が間違ってる、というメッセージです。 year, month,dayはポインタではなく実体で宣言しています。 これらをポインタに変換する必要があります。 そのやり方は・・・ポインタの勉強ということでご自身で調べてみてください。
yu3sukei22

2021/05/13 17:56

わかりました。丁寧にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問