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

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

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

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

Q&A

解決済

2回答

1745閲覧

ポインターを使ったプログラムのコンパイルエラーが出ます。

cuttman_bro

総合スコア7

C

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

0グッド

0クリップ

投稿2020/10/21 09:28

コンパイルエラーがでてしまいます 。どうすればいいですか?エラー内容はおそらくポインターのことですがどこをいいのかがわかりません。

プログラム内容
キーボードから数値を3つ入力すると、それらの平均を計算して 表示するとともに、入力した値自体と、入力値から平均値を引き算した結果を表示 (+-符号付き、小数点以下第3位まで) するプログラムです。
特徴。

  1. キーボードからの入力と結果表示は、main側で行う。入力される値は浮動小数点数とする。
  2. 平均値の計算は、関数 ave3() の中で行う。この関数はmain側から 3つのデータを引数として受け取り、それらの平均を計算し、結果を戻り値として返す。
    0. 入力データから平均値を引き算する操作は、関数 sub3() の中で行う。この関数はmain側から3つのデータに関する情報と、先に計算した平均値を 引数として受け取り、3つのデータそれぞれから平均を引き算する。 この関数は戻り値無しとし、main側では関数の中で変更された3つの値をそのまま出力する。

source

1#include <stdio.h> 2 3double ave3(double, double, double); 4double subave3(double *,double *, double *); 5 6int main() 7{ 8 double a, b, c, ave; 9 10 printf("3つ値を入力してください:\n"); 11 scanf("%lf%lf%lf", &a, &b, &c); 12 13 ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 14 15 printf("平均: %.3f\n", ave); 16 printf("元のデータ: %+.3f %+.3f %+.3f\n", a, b, c); 17 18 subave3(double *x, double *y, double *z); 19 20 printf("平均差し引き後のデータ: %+.3f %+.3f %+.3f\n", a, b, c); 21 22 return 0; 23} 24 25/* 平均を計算する関数。データから平均値の引き算も行う。 */ 26double subave3(double x, double y, double z) 27{ 28 x -= ave; /* 各データから平均を引き算する */ 29 y -= ave; 30 z -= ave; 31 32 a=x; 33 b=y; 34 c=z; 35 36 return a,b,c; 37} 38 39double ave3(double x, double y, double z){ 40 ave = (*x + *y + *z) / 3.0; 41 return ave; 42}

Error

1prog01.c: In function ‘main’: 2prog01.c:13:14: error: incompatible type for argument 1 of ‘ave3’ 3 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 4 | ^~ 5 | | 6 | double * 7prog01.c:3:13: note: expected ‘double’ but argument is of type ‘double *’ 8 3 | double ave3(double, double, double); 9 | ^~~~~~ 10prog01.c:13:18: error: incompatible type for argument 2 of ‘ave3’ 11 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 12 | ^~ 13 | | 14 | double * 15prog01.c:3:21: note: expected ‘double’ but argument is of type ‘double *’ 16 3 | double ave3(double, double, double); 17 | ^~~~~~ 18prog01.c:13:22: error: incompatible type for argument 3 of ‘ave3’ 19 13 | ave = ave3(&a, &b, &c ); /* 関数の呼び出し */ 20 | ^~ 21 | | 22 | double * 23prog01.c:3:29: note: expected ‘double’ but argument is of type ‘double *’ 24 3 | double ave3(double, double, double); 25 | ^~~~~~ 26prog01.c:18:11: error: expected expression before ‘double’ 27 18 | subave3(double *x, double *y, double *z); 28 | ^~~~~~ 29prog01.c:18:3: error: too few arguments to function ‘subave3’ 30 18 | subave3(double *x, double *y, double *z); 31 | ^~~~~~~ 32prog01.c:4:8: note: declared here 33 4 | double subave3(double *,double *, double *); 34 | ^~~~~~~ 35prog01.c: At top level: 36prog01.c:26:8: error: conflicting types for ‘subave3’ 37 26 | double subave3(double x, double y, double z) 38 | ^~~~~~~ 39prog01.c:4:8: note: previous declaration of ‘subave3’ was here 40 4 | double subave3(double *,double *, double *); 41 | ^~~~~~~ 42prog01.c: In function ‘subave3’: 43prog01.c:28:8: error: ‘ave’ undeclared (first use in this function); did you mean ‘ave3’? 44 28 | x -= ave; /* 各データから平均を引き算する */ 45 | ^~~ 46 | ave3 47prog01.c:28:8: note: each undeclared identifier is reported only once for each function it appears in 48prog01.c:32:3: error: ‘a’ undeclared (first use in this function) 49 32 | a=x; 50 | ^ 51prog01.c:33:3: error: ‘b’ undeclared (first use in this function) 52 33 | b=y; 53 | ^ 54prog01.c:34:3: error: ‘c’ undeclared (first use in this function) 55 34 | c=z; 56 | ^ 57prog01.c: In function ‘ave3’: 58prog01.c:40:3: error: ‘ave’ undeclared (first use in this function); did you mean ‘ave3’? 59 40 | ave = (*x + *y + *z) / 3.0; 60 | ^~~ 61 | ave3 62prog01.c:40:10: error: invalid type argument of unary ‘*’ (have ‘double’) 63 40 | ave = (*x + *y + *z) / 3.0; 64 | ^~ 65prog01.c:40:15: error: invalid type argument of unary ‘*’ (have ‘double’) 66 40 | ave = (*x + *y + *z) / 3.0; 67 | ^~ 68prog01.c:40:20: error: invalid type argument of unary ‘*’ (have ‘double’) 69 40 | ave = (*x + *y + *z) / 3.0; 70 | ^~ 71

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーメッセージを見て、一つ一つ見直しを行いましょう。

まず、

C

1double ave3(double, double, double); 2double subave3(double *,double *, double *);

(既に指摘がありますが)関数の引数は合っていますか?

関数main():
subave3(double *x, double *y, double *z); C言語ではこのような呼び出しは行えません。

関数 subave3():
a, b, cが使われていますが、宣言されていません。aveもこの関数には無いですね。 また、return a,b,c; C言語の場合、戻り値は一つです。(関数宣言も一つですが)
関数 ave3():
aveが未定義で使われています。

ざっとこんなところでしょうか。
単に動くようにする事はできますが、多分、元のソースとの違いが取りにくいので、とりあえず、問題となるところ。

まずは、エラーメッセージを読むところから、始めましょう。

投稿2020/10/21 12:19

pepperleaf

総合スコア6385

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

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

0

prog01.c:13:14: error: incompatible type for argument 1 of ‘ave3’

定義してるのと引数の型が違うと言ってます。
ちゃんと合わせましょう

投稿2020/10/21 09:44

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問