2017-04-22 21 views
0

ファイルの最初の番号を読み込み、そのサイズの配列を作成し、次に2番目のファイルを読み込んで、そのサイズの別の配列を作成するプログラムを作成しています。次に、最初の配列に最初のファイルの値を入力し、2番目の配列に2番目のファイルの値を入力します。私はそれの大部分を取り除きましたが、最初の数字をファイルで取得する方法を理解することはできません。誰か助けてくれますか?ファイルの読み込みと格納

int main() 
{ 

    //int a[][],b[][],i,j,k,s,r; 

    ifstream inFile1,inFile2; 
    inFile1.open ("mat1.txt"); 
    inFile2.open ("mat2.txt"); 

    inFile1 >> n; 
    for(i=0;i<n;++i) 
    for(j=i;j<n;++j) 
    inFile1 >> a[i][j]; 

    inFile2 >> n; 
    for(i=0;i<n;++i) 
    for(j=i;j<n;++j) 
    inFile2 >> b[i][j]; 


    inFile1.close(); 
    inFile2.close(); 
    return 0; 
} 
+0

各ファイルから 'N'( 'open'を想定すると、ファイルを検索します)読みのように思えます。もちろん、最初に変数を宣言する必要があります。あなたはどこに問題が見えますか? –

+0

コンパイル時に配列のサイズがわからない場合は、動的に宣言するか、ベクターを使用することを検討する必要があります。 – JGroven

+0

私はそれを得るが、私はそれを行う方法をコードを知らない。 –

答えて

0

を、私はあなたが質問から何を望むかは全く明らかではなかったが、私はヨーヨーを想定しています2つの異なるファイルからn x nの配列を読み込みたいとします.nはファイルが開かれるまで分かりません。以下のコードはそれを行うべきです。

newは、実行時にのみ認識されるサイズの配列を宣言することに注意してください。i*n1 + jなどです。これは、C++標準(または少なくとも以前のもの)では可変長配列をサポートしています...私のコンパイラでは正常に動作しますが、すべてのコンパイラで動作する保証はありません(here参照)。代わりに、配列ではなくベクトルを使用する方法もあります。

また、このコードには多くの繰り返しがあるので、おそらく関数に繰り返しのものを入れたほうがよいでしょう。

/* 
// mat1.txt 
3 
1 2 3 
4 5 6 
7 8 9 
*/ 

/* 
// mat2.txt 
4 
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
*/ 

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    int n1, n2; 

    ifstream inFile1,inFile2; 
    inFile1.open ("mat1.txt"); 
    inFile2.open ("mat2.txt"); 

    inFile1 >> n1; 
    int* file1contents = new int[n1*n1]; 
    for(int i=0; i<n1; ++i) { 
     for(int j=0; j<n1; ++j) { 
      inFile1 >> file1contents[i*n1 + j]; 
     } 
    } 

    inFile2 >> n2; 
    int* file2contents = new int[n2*n2]; 
    for(int i=0; i<n2; ++i) { 
     for(int j=0; j<n2; ++j) { 
      inFile2 >> file2contents[i*n2 + j]; 
     } 
    } 

    // Print file contents to check it worked 
    cout << "File 1, size: " << n1 << ", contents:" << endl; 
    for(int i=0; i<n1; ++i) { 
     for(int j=0; j<n1; ++j) { 
      cout << file1contents[i*n1 + j] << ","; 
     } 
     cout << "\n"; 
    } 
    cout << endl; 

    cout << "File 2, size: " << n2 << ", contents:" << endl; 
    for(int i=0; i<n2; ++i) { 
     for(int j=0; j<n2; ++j) { 
      cout << file2contents[i*n2 + j] << ","; 
     } 
     cout << "\n"; 
    } 
    cout << endl; 

    delete [] file1contents; 
    delete [] file2contents; 

    inFile1.close(); 
    inFile2.close(); 
    return 0; 
} 
+0

これは正確に私が知る必要があったものです。ありがとうございますKabdulla –

+0

@BonnieDeeds心配はありません。それがあなたの質問に答えるなら、それを受け入れられた/ upvotingとしてマークすることを検討してください。 – kabdulla

0

これは、ファイルから読み取るか、あなたはファイル全体またはその一部だけを読み取るために、このいじることができます:

関数fgetsはファイルから

const int maxString = 1024; // put a limit for your buffer 

    printf("reading file\n"); 
    char buf[maxString]; /* make a buffer to store what your reading from 
          the file*/ 
    FILE * fr = fopen(fn, "r"); // open the file 
    while(fgets(buf, maxString, fr)) /* fgets reads the file and writes it 
             to buffer*/ 
    { 
     fputs(buf, stdout); /*see what it is reading*/ 
    } 

    fclose(fr); // close the file 
    remove(fn); // if you want to remove the file when your done reading 
を読み取るために使用するものです

または多分このような何か:

string line; 
//while there is a line to get 
while(getline(fileIn, line)) 
{ 
    firstCharacter = line[0]; // access the first character 
} 
関連する問題