ページ 1 / 1
C言語の構造体についての質問です
Posted: 2017年10月16日(月) 01:24
by おさかなさん
コード:
#include <stdio.h>
typedef struct Three{
double a;
double b;
double c;
} Three;
Three Scan(void);
double CULC(Three t);
int main(void)
{
Three t;
double result;
t.a = Scan();
t.b = Scan();
t.c = Scan();
result = CULC(t);
printf("3つの数の積は%fです\n", result);
return 0;
}
//数の入力
Three Scan(void)
{
Three t;
printf("3つの数を入力:\n");
scanf("%lf %lf %lf", &t.a, &t.b, &t.c);
printf("a = %lf\n", t.a);
printf("b = %lf\n", t.b);
printf("c = %lf\n", t.c);
return (t);
}
//積の計算
double CULC(Three t)
{
double result;
result = t.a * t.b * t.c;
return (result);
}
3つの数を読み込んでその積を出すコードで、構造体の練習用につくってみました。
ですが、main関数の
t.a = Scan();
t.b = Scan();
t.c = Scan();
の部分に、 型 ‘double’ への型 ‘Three’ からの代入時に互換性のない型です とエラーメッセージが出てしまいます。
どのように直せばうまくコンパイルできるのでしょうか?
原因というか仕組みも知りたいです。
Re: C言語の構造体についての質問です
Posted: 2017年10月16日(月) 02:01
by みけCAT
Scan関数はThree型のデータを返すので、
コード:
t.a = Scan();
t.b = Scan();
t.c = Scan();
のように分けて代入しようとするのではなく、
のようにThree型の変数に直接代入するようにするといいでしょう。
Re: C言語の構造体についての質問です
Posted: 2017年10月16日(月) 07:30
by Math
つまりWindows10、VS2017では
コード:
#include <stdio.h>
typedef struct tagThree {
double a;
double b;
double c;
} Three;
Three Scan(void);
double CULC(Three t);
int main(void)
{
Three t;
double result;
//////////////////////////
t=Scan();
//t.a = Scan();
//t.b = Scan();
//t.c = Scan();
//////////////////////////
result = CULC(t);
printf("3つの数の積は%fです\n", result);
return 0;
}
//数の入力
Three Scan(void)
{
Three t;
printf("3つの数を入力:\n");
scanf("%lf %lf %lf", &t.a, &t.b, &t.c);
printf("a = %lf\n", t.a);
printf("b = %lf\n", t.b);
printf("c = %lf\n", t.c);
return (t);
}
//積の計算
double CULC(Three t)
{
double result;
result = t.a * t.b * t.c;
return (result);
}
コード:
D:\z17c\c\1016>c
D:\z17c\c\1016>rem コンパイル後リンク
D:\z17c\c\1016>cl /TC c1.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.11.25508.2 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
c1.c
Microsoft (R) Incremental Linker Version 14.11.25508.2
Copyright (C) Microsoft Corporation. All rights reserved.
/out:c1.exe
c1.obj
D:\z17c\c\1016>rem 実行結果
D:\z17c\c\1016>c1.exe
3つの数を入力:
2 4 6
a = 2.000000
b = 4.000000
c = 6.000000
3つの数の積は48.000000です
D:\z17c\c\1016>
となりますね。
Re: C言語の構造体についての質問です
Posted: 2017年10月17日(火) 11:51
by おさかなさん
まとめて表記したところうまくいきました。
ありがとうございました!