2016-03-29 3 views
0

私は-1を格納する変数を持っています。 NaNの変数をチェックしたい例えば:someVarに保存されているものがない場合私は変数が空であるかCでないかどうかを確認しようとしています

#include <stdio.h> 

int main(void) 
{ 
    int someVar; 

    if (some condition) 
    someVar = -1; 
    else if((someVar == NaN) && (some other condition)) 
    someVar = 1; 

    return 0; 
} 

は他の最初の条件リターンtrueは、IF文ウィル?

+1

空ではどういう意味ですか? – Haris

+2

'someVar'は初期化されていないので、値が何であるか分かりません。変数を読む前に必ず**初期化するべきです。 – Joe

+2

いいえ(非静的、非グローバル)未初期化変数は未定義の動作です。 – Zeta

答えて

2

変数はRAMにあります。 RAMは決して空ではありません。各セルには値があります。プログラマーが値を知っているかどうかは、プログラマーがその変数を初期化したかどうかによって異なります。

私は、変数の "空き"を知らせる2つの方法を知っています。 1つは、「空」を意味する値、例えば「0」、またはMAX_INTEGER、または好きなものを持つことです。これは、アルゴリズムのロジックが特定の値のみを持つように変数を強制する場合に有効です。そのため、値が有効かどうかを知ることができます。そうでない場合、変数が有効でないか、空であると言うことができます。

あなたの変数は、(あなたのタイプの範囲内で)任意の値を保持することができた場合は、解決策は次のように、小さな構造体を使用することがあります

typedef struct 
{ 
    int value; 
    int is_empty; 
} tVar; 

ように可変iをこのように宣言...

i.is_empty = 1; 

だから、あなた:あなたはこのように、空として初期化することができます

tVar i; 

プログラムは次のようになります。

int main(void) 
{ 
    tVar someVar = {0,1}; // declaring and initializing it as empty 

    ... 
    ... 
    ...  
    if (!someVar.is_empty) // if someVar is not empty... 
    { 
    someVar.value = -1; 
    someVar.is_empty = 0; // is not empty any more 
    } 
    else if (someVar.is_empty && (some_other_condition)) 
    { 
    someVar.value = 1; 
    someVar.is_empty = 0; 
    } 

    return 0; 
} 
+0

徹底してくれてありがとう! – kohai

3

変数を「空」にすることはできません。それは常に価値があります。

文字列の場合と同じように、 "空"を示す値を手動で指定できます。ヌルバイト(値0)は、文字列の末尾を示します。ここでは空虚ではありませんが、うまくいけば、私は何を意味するのでしょう。

変数を空にすることはできないため、一般的なNaN値はありません。すべての値は数値なので、NaN(数値ではない)は意味をなさない。
浮動小数点形式のIEEE 754はNaN値をサポートしていますが、浮動小数点数の特定の値にその意味が割り当てられているためにのみ可能です。

+0

@Downvoterいくつかの精巧さが評価されます。 – Downvoter

+0

NMDVですが、 "変数は空ではありません"というわけではありません。変数は空ではありません。Cではそれが検出される方法がありません。 :指定されていない値またはトラップ表現IOWs、変数_could_が_empty_状態である多くのアーキテクチャではこれを採用していません – chux

+0

@chuxデータの抽象コンテナとして変数を考えると、 – Downvoter

0

変数に「nothing」を格納することはできません。すべての変数は値を持ちます。 ほとんどの場合、「0」が格納されますが、それほどまれではありませんが、変数にガベージが格納されます。 Variableがメモリ内の場所( 'ゴミ'がある場所)を取得する直前にその場所が残っています。

「NaN」は、0で割るような場合やそれ以外の場合に発生します。

0

変数には常に値があります。何も保存していないと、「Garbage」と呼ばれることが多い乱数が格納されているので、避けたいものです。したがって、変数が空でないかどうかはチェックできません。

関連する問題