2

ファイルから 2D 配列に整数を読み込む必要があるプログラムに取り組んでいます。概念は簡単で、ファイル I/O については概ね問題ありません。私の問題は、ファイルに 18 個の数字が 20 行含まれていることです。数字は空白で区切られていません。例は次のとおりです。

123456789987654321
192837465564738291

個々の数値を 2D 配列に読み込む必要があります。for ループを作成しましたが、ループのファイル I/O 部分から必要な出力が得られません。これを行う方法はありますか、または行を文字列/配列に読み取って分割するなどの回避策を使用する必要がありますか? それは私を怒らせています。コードでは、infile が開かれてテストされています。GRIDSIZE のサイズは 9 で、グリッドは 2D 配列です

int n;

for(int i=0; i<GRIDSIZE; i++)
      {   
    for(int j=0; j<GRIDSIZE; j++)
      {
        infile.get()>>grid[i][j];//This is causing the problem
         // infile >> n //Also tried this, not working
         // grid[i][j] = n;
        cout<<grid[i][j]<<endl;
      }
      }
4

2 に答える 2

4

ifstream で get() を呼び出すと、int にキャストされた単一の文字が返されます。だから変えてみて

infile.get()>>grid[i][j];

grid[i][j] = infile.get();

これにより、数字の ASCII 値が得られます。次にisdigit()を使用して ( stefaanv が指摘したように) 実際に数字があることを確認し、それらから 0x30 (= 48 または '0') を減算して整数値を取得します ( ASCII チャートから明らかなように、数字は 0x30 から 0x39 になります)。たとえば、次のようになります。

int n = infile.get();
if(isdigit(n)) {
  grid[i][j] = n - '0';
}
于 2012-04-05T10:53:25.210 に答える
3

infile.get()を使用して文字を取得し(sonicwaveの回答のように)、isdigit()で実際に整数の数字があるかどうかを確認できます。

編集(adohertyd からのコメント後):
ASCII 文字が数字の場合、ASCII 文字 '0' を減算して実際の数値を取得できます。

于 2012-04-05T10:56:33.273 に答える