2016-11-01 57 views
0

私は2次元配列にファイルの情報を埋め込むところにこのコードを書いています。ファイルは次のとおりです:2次元配列への要素の追加C++

5 

Franks,Tom 2 3 8 3 6 3 5 

Gates,Bill 8 8 3 0 8 2 0 

Jordan,Michael 9 10 4 7 0 0 0 

Bush,George 5 6 5 6 5 6 5 

Heinke,Lonnie 7 3 8 7 2 5 7 

数字は配列内にあります:data[50][8]

また、私が行った各行のすべての数字を合計します。この合計をデータ配列に追加して、2 3 8 3 6 5 3 30のように見せたいと思います。これはどうすればいいですか?ここ は、すべて私のコードは、あなたがそれを見たい場合です:

int main() 
{ 

    ifstream fin; 
    char ch; 
    int data[50][8]; 
    string names[50]; 

    fin.open("empdata.txt"); 

    int sum = 0; 
    int numOfNames; 
    fin >> numOfNames; 

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

     fin >> names[i]; 

     for (int j = 0; j < 7; j++) { 
      fin >> data[i][j]; 
     } 
      } 

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

      for (int j = 0; j < 7; j++) 
      { 
       sum += data[i][j]; 

      } 
      cout << sum << endl; 
      sum = 0; 
     } 
} 

ここではC650で私を助けた新しいコードです。それは今は何も出力していない:メイン(){

ifstream fin; 
char ch; 
int data[50][8]; 
string names[50]; 

fin.open("empdata.txt"); 

int sum = 0; 
int numOfNames; 
fin >> numOfNames; 

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

    fin >> names[i]; 

    data[i][7] = 0; 

    for (int j = 0; j < 7; j++) { 
     fin >> data[i][j]; 
     data[i][7] += data[i][j]; 
    } 
} 

for (int i = 0; i < numOfNames; i++) 
{ 
    cout << data[i][7] << endl; 

} 



system("pause"); 
return 0; 

}

+0

ファイルをフォーマットしてください... – Charles

+0

私はちょうどしました。希望があれば – Ralf

+0

STLを使うことをお勧めします。 'std :: vector'は本当にあなたを助けるかもしれません! – Charles

答えて

1

次はあなたがやろうとしているもののように思える int型。私はあなたが提示したコードの欠陥を指摘します。

これは最善の方法ではありませんが、OPに従って、STLを使用できないなどの制約があります。

/* 1 */ #include <fstream> 
/* 2 */ #include <iostream> 
/* 3 */ #include <string> 
/* 4 */ 
/* 5 */ using namespace std; 
/* 6 */ int main() 
/* 7 */ { 
/* 8 */ 
/* 9 */  ifstream fin; 
/* 10 */  int data[50][8]; 
/* 11 */  string names[50]; 
/* 12 */ 
/* 13 */  fin.open("test.txt"); 
/* 14 */ 
/* 15 */  int numOfNames; 
/* 16 */  fin >> numOfNames; 
/* 17 */ 
/* 18 */  for (int i = 0; i < numOfNames; i++) { 
/* 19 */ 
/* 20 */   fin >> names[i]; 
/* 21 */ 
/* 22 */   data[i][7] = 0; /* use last spot in array for sum, set to 0. */ 
/* 23 */   for (int j = 0; j < 7; j++) { 
/* 24 */    fin >> data[i][j]; 
/* 25 */    data[i][7] += data[i][j]; 
/* 26 */   } 
/* 27 */  } 
/* 28 */ 
/* 29 */  for (int i = 0; i < numOfNames; i++) 
/* 30 */  { 
/* 31 */   cout << data[i][7] << endl; /* add each element to the sum here*/ 
/* 32 */  } 
/* 33 */  return 0; 
/* 34 */ } 

OPに出力が生成されなかった問題がありました。 OPの場合、入力ファイルの名前が正しいことを確認する必要があります。

+0

これはうまくいくようですが、今は何も出力していません。ここにコード – Ralf

+0

があります。data [i] [7] + = data [i] [j]; \t {\t \t COUT <<データ[I] [7] << ENDL(; iがnumOfNamesを Ralf

+0

オハイオウはそれほど過去のことではありませんでした。私は一番上の質問を編集します。 – Ralf

0

他の同様の記事で回答しました。構造を使ってレコードをモデル化してください。

Record student_info[MAXIMUM_STUDENTS]; 

簡単にファイルから読み込むようにするには、あなたは構造体の内部operator>>をオーバーロードすることができます:

struct Record 
{ 
    //... 
    friend std::istream& operator>>(std::istream& input, Record& r); 
}; 

std::istream& operator>>(std::istream& input, Record r) 
{ 
    std::getline(input, r.last_name, ','); 
    std::getline(input, r.first_name, ' '); 
    for (unsigned int i = 0; i < MAXIMUM_GRADES; ++i) 
    { 
    input >> r.grades[i]; 
    } 
    return input; 
} 

この簡素化を

struct Record 
{ 
    std::string last_name; 
    std::string first_name; 
    unsigned int grades[MAXIMUM_GRADES]; 
}; 

これは、あなたが混在型の配列を持つことができます入力ループ:

for (unsigned int i = 0; i < MAXIMUM_STUDENTS; ++i) 
{ 
    my_data_file >> student_info[i]; 
} 

あまりにも悪いあなたstd::vectorを使用することはできません。 std::vectorは、特にというファイルのサイズがわからないときは、ファイルからの読み取りに最適です。

+0

この男はまだ構造体を理解する方法については行列についてはありませんか? – Real73

+0

@ShahrairNazimReal:指導コースと話題の順序によって異なります。構造の前に配列を議論する必要はありません。構造は配列の前に議論することができます。 –

関連する問題