0

いくつかの不等式を評価する if、else if、else ステートメントを含むコードがあります。
私の質問は次のとおりです。ステートメントの結果 (この場合は Monoatomic、Diatomic、Polyatomic) を文字列変数に割り当てて、後でこの変数を使用してグラフに注釈を付けるにはどうすればよいですか?

/* Determine the type of gas - theoretical gamma for: 
     - monoatomic = 1.66 
     - diatomic = 1.4
     - polyatomic = 1.33 */

if (gamma <=1.36)
    printf("This gas is POLYATOMIC\n");

else if (gamma > 1.36 && gamma <= 1.5)
    printf("This gas is DIATOMIC\n");

else
    printf("This gas is MONOATOMIC\n");

ご覧のとおり、現時点では結果を印刷することしかできません。しかし、これでは結果を後で使用できません。

4

2 に答える 2

2

変数を使用してこの情報を保存します。

#define POLYATOMIC 3 
#define DIATOMIC 2 
#define MONOATOMIC 1 
#define INVALID 0 

int atomicity = INVALID;
const char* gasTypeName = "ERROR";

if (gamma <=1.36)
{
    atomicity = POLYATOMIC;
    gasTypeName = "Polyatomic";
}
else if (gamma > 1.36 && gamma <= 1.5)
{
    atomicity = DIATOMIC;
    gasTypeName = "Diatomic";
}
else
{
    atomicity = MONOATOMIC;
    gasTypeName = "Monoatomic";
}

printf("The gas is %s", gasTypeName);
于 2013-03-18T18:40:35.630 に答える
1

ガスタイプには列挙型を使用し、印刷可能な表現には説明文字列の配列を使用できます。結果の状態を整数/列挙型として保存すると、簡単に比較できるという利点がありswitchます。対照的に、文字列の比較は少し面倒です。

X-Macrosを使用した実装例を次に示します。

#include <stdio.h>

#define GASTYPES \
    ENTRY(MONOATOMIC) \
    ENTRY(DIATOMIC) \
    ENTRY(POLYATOMIC)

typedef enum {
#define ENTRY(x) x,
    GASTYPES
#undef ENTRY
} gastype_t;

const char const * gastype_str[] = {
#define ENTRY(x) #x,
    GASTYPES
#undef ENTRY
};

int main() {
    double gamma; 
    gastype_t gastype;
    if(scanf("%lf", &gamma)) {
        if (gamma <= 1.36)
            gastype = POLYATOMIC;
        else if (gamma <= 1.5)
            gastype = DIATOMIC;
        else
            gastype = MONOATOMIC;
        printf("This gas is %s\n", gastype_str[gastype]);
        return 0;
    }
    else {
        printf("Failed to parse input :(\n");
        return -1;
    }
}

これにより、プリプロセッサは、実際のコンパイルの前に、列挙型の定義と説明文字列の配列を次のように展開します。

typedef enum {
    MONOATOMIC,
    DIATOMIC,
    POLYATOMIC,
} gastype_t;

const char const * gastype_str[] = {
    "MONOATOMIC",
    "DIATOMIC",
    "POLYATOMIC",
};

使用例:

$ gcc test.c && echo "1.4" | ./a.out
This gas is DIATOMIC
于 2013-03-18T19:20:04.267 に答える