2017-11-27 20 views
-2

ヘッダファイルの宣言などを使ってCを開始しました。私は37 Kelvinのような構造体から温度の名前と次数の値をとり、それを希望の温度に変換するテストプログラムを作成しようとしています。 ヘッダファイルにtypedef、struct、enum宣言を書きましたが、今はメインファイルからそれらにアクセスするのに苦労しています。私は取得していますエラーが「エラー:何かない構造体または共用体のメンバの要求 『lampotila』」です。Cファイルの構造体へのアクセス

#ifndef asteet_h 
#define asteet_h 

typedef float Lampotila; 
typedef char Asteikko[20]; 
struct Lampotila { 
    Lampotila lampotila; 
    Asteikko asteikko; 

}; 



enum Asteikko{ 
Celsius = 1, 
Fahrenheit = 1, 
Kelvin = 1 
}; 
float muunna(Lampotila,Asteikko); 
#endif 

そして、私のメインの操作ルックス

は私のヘッダファイルには、以下の通りですこのように:

#include <stdio.h> 
#include <string.h> 
#include "asteet.h" 

int main(int argc,char *argv[]){ 

float muunna(Lampotila a, Asteikko b){ 
    if(a.asteikko == "Celsius" && b == "Fahrenheit"){ 
     return(a.lampotila*1.8+32); 
    } 
    else if(a.asteikkko == "Fahrenheit" && b == "Celsius"){ 
     return((a.lampotila-32)/1-8); 
    } 
    else if(a.asteikko == "Celsius" && b == "Kelvin"){ 
     return(a.lampotila + 273.15); 
    } 
    else if(a.asteikkko == "Kelvin" && b == "Celsius"){ 
     return(a.lampotila - 273.15); 
    } 
    return 0; 
} 
return 0; 
} 

私は、次のテストデータでそれを実行しようとしている:

Lampotila a = {23.5, Celsius}; 
Lampotila b = {79.7, Fahrenheit}; 
Lampotila c = {285.8, Kelvin}; 
Asteikko kelvin = Kelvin; 
printf("23.5 C on %.2f K\n", muunna(a, kelvin)); 
printf("79.7 F on %.2f C\n", muunna(b, Celsius)); 
+0

あなたの関数はmainの中で宣言され、floatとstructのtypedefの名前は同じです。文字列を '=='で比較することもできません。 'strcmp'が必要です。あなた自身の好意で本を手に入れよう。このコードには多くの誤りがありますが、これはいくつかの章の後に整理してあります。 –

+0

このコードは意味を持ちません。プログラミング時には、「推測する」ことはできません。実際には、あなたが書くすべての行が何をしているのかを理解する必要があります。 – Lundin

答えて

1

次の問題を修正してください。

  1. あなたが構造を使用し、構造体のキーワードを指定するか、struct <structure name> のでライン「float muunna(Lampotila a, Asteikko b){」「float muunna(struct Lampotila a, Asteikko b){」となりますがtypedefをする必要があります。これにより、エラーがクリアされます。

  2. else if(a.asteikkko == "Fahrenheit" && b == "Celsius"){あなたの構造で定義されている唯一の2 'k年代を持つasteikkkoとして間違っています。

  3. mainの外で関数を定義し、引数を渡して関数を呼び出すことができます。
関連する問題