2017-02-08 16 views
0

簡略化するために、ファイルから数値を読み込んで2D配列に格納する必要があります。私はそれから、ファイルに配列を満たすのに十分な数があることを確認する必要があります。配列要素が空であるかどうかを調べる方法は?

ファイル内の最初の2つの数字は、配列に必要な行数と列数を宣言したものです。

私が苦労している部分は、ファイル内の数字に0を含めることができるということです。

要素が

double numbers[MAX_ROW][MAX_COL]; 

for(int i = 0; i <= row; i++) { 

    for(int n = 0; n <= col; n++) { 

     if(!numbers[i][n]){ 
      cout << "Error: There is not enough data found file :(...." << endl; 
      cout << "The Program will now exit....." << endl; 

      return 0; 
     } 

    } 
} 

空だった場合、私はテストするには、このメソッドを使用していた。しかし、その後、私は、ファイルが、私はしたくない何かがある番号0が含まれている場合、プログラムが終了することを実現しました起こる。

私はまた、ポインタを使用してNULLをテストしようとしましたが、それは私に警告(NULLと非ポインタの比較)を与えました。ファイルに0があれば、同じことが起こりますただ終了する。

double (*ptrNumbers)[MAX_COL] = numbers; 


for(int i = 0; i <= row; i++) { 

    for(int n = 0; n <= col; n++) { 

     if(ptrNumbers[i][n] == NULL){ 
      cout << "Error: There is not enough data found file :(...." << endl; 
      cout << "The Program will now exit....." << endl; 

      return 0; 
     } 

    } 
} 

例ファイル:

この1作品罰金

これは

3 3 
    1 3 4 
    3 0 4 
    3 5 2 

これは、エラーの種類があるため、ファイル内のゼロの作品ではありません

3 3 
    1 3 4 
    3 2 4 
    3 5 2 

Iテストしたい 3行3列ありますが、配列の残りの部分を埋める数字はありません。したがって、0に初期化されます。結論として、同じ問題が発生します。

3 3 
    1 3 4 
    3 2 4 
    3  

「空の」要素はテストできますが、0の要素はテストできますか?それとも、何か間違っているだけですか?

任意のヘルプ:)

ための事前のおかげで、私は、以前の勧告からの私のプログラムを変更した後。

ファイルに十分な数がない場合、偽の文を返すようにbool関数を設定しました。しかし、ファイルの数値が正しい場合でも、ファイルはifステートメントを実行し、false値を返します。私の構文は何らかの形で間違っていますか?

for(int i = 0; i <= row; i++) { 

    for(int n = 0; n <= col; n++) { 

     if(!(inFile >> numbers[i][n])) { 

      return false; 
     } 
     else { 
      inFile >> numArray[i][n]; 

     } 


    } 
} 
return true; 
+2

*次に、ファイルに十分な数字が入力されていることを確認して、配列を埋めるようにする必要があります。*これを行うには、正常に読み取られた数字の数を記録するのが最善の方法です。 –

+0

有効なデータを含むものと無効なデータを含むものの2つのサンプルファイルを投稿する必要があります。そうすれば、他の人が欠けている数字に対処するための戦略を提案することができます。 –

+0

私は、プログラムには、すべてのファイルに対して保持する必要がある一定量の要素が割り当てられていると述べたはずです。基本的には、ファイル内にいくつの要素があるのか​​というだけで、ここに掲載した関数を変更して例を挙げただけです。 –

答えて

1

ファイルの内容を読み取っているときにエラーを検出する必要があります。

std::ifstream ifile("The input file"); 
ifile >> row >> col; 
for(int i = 0; i <= row; i++) { 
    for(int n = 0; n <= col; n++) { 
     if(! (ifile >> ptrNumbers[i][n])) 
     { 
     // Problem reading the number. 
     cout << "Error: There is not enough data found file :(...." << endl; 
     cout << "The Program will now exit....." << endl; 
     } 
    } 
} 

更新

更新機能に障害があります。

for(int i = 0; i <= row; i++) { 
    for(int n = 0; n <= col; n++) { 
     if(!(inFile >> numbers[i][n])) { 
      return false; 
     } 
     else { 
      // You are now reading into the same element 
      // of the array again. 
      inFile >> numArray[i][n]; 
     } 
    } 
} 
return true; 

あなたは、その機能にelse一部を必要としません。

for(int i = 0; i <= row; i++) { 
    for(int n = 0; n <= col; n++) { 
     if(!(inFile >> numbers[i][n])) { 
      return false; 
     } 
    } 
} 
return true; 
+0

を見てみるとよいでしょう。ファイルから読み込むことを意味し、毎回実行されます。 –

+0

@MohamedElmalah、おそらくエラーメッセージの後ろに ';'を追加することができます。 –

+0

私はそれが問題ではないと思う、私はちょうど私の構文が何とか間違っていると思う。私は自分の質問を更新し、あなたが推奨するステートメントを追加しましたが、何かが間違っているようです。大変申し訳ありませんが、更新された質問を見て、私を助けてくれたら本当に感謝しています。 @RSahu –

関連する問題