0

要素を持つ 13x13 の配列がありますが、すべての要素が数値ではありません。数値でない場合は空白で埋められるため、特定のインデックスに数値が存在するかどうかを確認する方法を見つけようとしています。番号が存在する場合、そうでない場合はジョブを実行し、ループに戻ります。これは私が持っているものです:

    int *spaceCheck;  
    int i, Value;  
    for(i=0;i<169;i++){  
       spaceCheck = &Array[i];       
       if(!spaceCheck){  
          continue;
       else
          //do this job
    }

これはできますか?他に良い確認方法はありますか?助けてくれてありがとう。

169 要素の整数の配列です。そのため、データ (数値) が最初に読み込まれるとき、ファイルから配列に読み込まれる要素は 80 個だけです。配列内の残りのスペースは空白 (printf(" ")) で埋められます。混乱させて申し訳ありません。

4

3 に答える 3

2

求めていることを行うには、「値なし」を示すセンチネル値を使用する必要があります。たとえば、次のようになります。

const int novalue = -1; // or whatever you want, as long as it is unique
int Array[169];
for (i=0;i<169;i++)
    Array[i] = novalue;
...
for(i=0;i<169;i++){  
   Value = Array[i];       
   if(Value == novalue)
      continue;
   //do this job
}

それ以外の場合は、int ではなく構造体で配列を作成します。

struct sValue
{
    char valid;
    int value;
};
sValue Array[169];
for (i=0;i<169;i++)
    Array[i].valid = 0;
...
for(i=0;i<169;i++){        
   if(Array[i].valid == 0)
      continue;
   Value = Array[i].value;
   //do this job
}
于 2013-06-20T04:20:58.313 に答える
2

配列要素は、zeroalways で初期化されない場合があります。最初に行う必要があるのは、デフォルト値で初期化することです。と言う0-1、何でも。次に、次のようにコードを変更できます。

int *spaceCheck;  
int i, Value;  
for(i=0;i<169;i++){  
   spaceCheck = &Array[i];       
   if(*spaceCheck!=default_value){  
      continue;
   else
      //do this job
}

配列要素の参照も格納していたことに注意してください。そのデータを確認したい場合は、dereferencing operator *. これがあなたが望むものであることを願っています。上記のコードを記述するより簡単な方法は、ポインターをまったく使用しないことです。それは次のとおりです。

int i, Value;  
for(i=0;i<169;i++){         
   if(Array[i]!=default_value){  
      continue;
   else
      //do this job
}
于 2013-06-20T04:15:11.317 に答える