2017-11-15 15 views
0

私は、ASCIIおよびバイナリイメージを読み込んで保存するライブラリを作成しています。私は、パラメータとして私の保存機能にそれらを渡すcのパラメータとしての列挙型

enum jmpr_PNMMode 
{ 
    BINARY_PPM,    /* Binary Portable Pixmap (P6) */ 
    ASCII_PPM,   /* Portable pixmap ASCII (P3) */ 
    BINARY_PGM,   /* Portable Graymap binary (P5) */ 
    ASCII_PGM   /* Portable Graymap ASCII (P2) */ 
}; 

:私は、ビットマップを保存するには4種類の方法のための4つの異なるフラグを含む列挙型を定義し

void jmpr_savePNM(char* filename, jmpr_Image* img, enum jmpr_PNMMode mode) 
{ 

} 

今、私は明確などのチェックする方法私はenumのインスタンスを持っていますか? 2番目のパラメータは技術的に文字ではありませんので、*

if (strcmp(mode, "ASCII_PPM") != 0) 

:それは動作しません。

+3

'mode == ASCII_PPM'です。または 'switch/case' –

答えて

1

このコード:

enum jmpr_PNMMode 
{ 
    BINARY_PPM,    /* Binary Portable Pixmap (P6) */ 
    ASCII_PPM,   /* Portable pixmap ASCII (P3) */ 
    BINARY_PGM,   /* Portable Graymap binary (P5) */ 
    ASCII_PGM   /* Portable Graymap ASCII (P2) */ 
}; 

BINARY_PPMが0である4つの整数、に意味のある名前を与え、各次の行は、いわゆる関数のコードがあってもよい1

によってその数をインクリメント使用:

if (BINARY_PPM == mode) 
    ... 
else if(ASCII_PPM == mode) 
    ... 
else if(BINARY_PGM == mode) 
    ... 
else if(ASCII_PGM == mode) 
    ... 
else 
{ 
    perror("invalid mode sent to jmpr_savePNM()"); 
    exit(EXIT_FAILURE); 
} 

または使用することができます

を10
switch(mode) 
    case BINARY_PPM: 
     ... 
     break; 

    case ASCII_PPM: 
     ... 
     break; 

    case BINARY_PGM: 
     ... 
     break; 

    case ASCII_PGM: 
     ... 
     break; 

    default: 
     perror("invalid mode sent to jmpr_savePNM()"); 
     exit(EXIT_FAILURE); 
     break; 
} // end switch() 

コードを分かりやすく読みやすく理解しやすいように、私はswitch()ステートメントを使用します。

3

enumsは文字列ではないので、strcmpを使用しないでください。基本的にはフードの下にある整数です。 if文を次のように変更する必要があります。

if (ASCII_PPM == mode) 

またはswitch文を使用することもできます。

switch (mode) 
{ 
    case ASCII_PPM: 
     ProcessAsciiPpm(); 
     break; 

    case BINARY_PPM: 
     ProcessBinaryPpm(); 
     break; 

    default: 
     break; 
} 
4

strcmpが文字列に使用されます。 enumは、実際にintのタイプなので、mode == ASCII_PPMは比較

6.7.2.2列挙型指定子

の正しい方法となります列挙リスト内の識別子は、int型を持つ定数として宣言されているそのようなものが許可されているところでは現れることがあります。

関連する問題