0

2次元配列を使用していくつかの値を格納するプログラムがあります。2 つの質問があります。まず、プログラムがテキスト ファイルからデータを正しく読み取っていません。配列内の数値を出力すると、すべてゼロになります。コードの何が問題になっていますか?

#include "stdafx.h"
#include<iostream>
#include<fstream>

using namespace std;

int ary [][13];

ofstream OutFile;
ifstream infile("NameAvg.txt");

//function prototype
void ReadIt (int [][13]); // Function call  ReadIntoArrayByRows(ary);
void WritePrintOutArray (int [][13]);

int main()
{
    //open/creates file to print to
    OutFile.open ("MyOutFile.txt");

    // Title and Heading 
    OutFile << "\nName and grade average\n";
    cout << "Name and grade average.\n\n";

    // Open and Reads .txt file for array
    ReadIt(ary);
    OutFile<<"\n-----------------------------"<<endl;
    cout<<"\n-----------------------------"<<endl;

    WritePrintOutArray(ary);
    OutFile<<"\n-----------------------------"<<endl;
    cout<<"\n-----------------------------"<<endl;

    //closes .txt file
    OutFile.close();
    cin.get();
    cin.get();
    return 0;
}

void WritePrintOutArray(int ary[][13])
{
    int col,
        row;
    for(row=0;row<2;row++)
    {
    for(col=0;col<8;col++)
    {
        ary[2][13];
        cout<<ary[row][col];
        OutFile<<ary[row][col];
    }
    cout<<endl;
    OutFile<<endl;
    }
 }

 void ReadIt(int ary[][13])
 {
    int col,
        row=0;

    while(infile>>ary[row][0])
    {
    for(col=1;col<13;col++)
    {
        infile>>ary[row][col];
        row++;
    }
    infile.close();
    }
 }

2 番目の質問は、1 つの 2 次元配列で char データ型と int 型の両方を保持できるかということです。または、.txt ファイル内のすべてのデータを char として取得してから、数値を int に変換する必要がありますか?

これを行う方法の例をいただければ幸いです。

4

2 に答える 2

1

最初のバグ: の宣言はaryスペースを予約していません。両方の次元に数値を指定する必要があります。

次に、2 つの異なるものを構造体に配置することで、それらの配列を作成できます。

struct It
{
    char c;
    int i;
};

It ary [MAX_ROWS][13];
于 2013-09-24T18:37:06.150 に答える
0

次の配列に関連付けられたメモリがありません:

int ary [][13];

そして、コンパイラが「「ary」のストレージサイズが不明です」などと文句を言わないのはなぜだろうか。std::vectorとにかく、代わりに使用する必要があります。について: 「単一の 2 次元配列は、charデータ型と型の両方を保持できintますか?」~> カスタムタイプを定義するか、代わりに以下を使用できます:

std::vector< std::vector< std::pair<char, int> > > grades;

このペアのマトリックスを見ていると...何かが間違っているように見えますが、あなたが達成しようとしていることは何でも、もっと簡単な方法があると確信しています.

また、グローバル変数を使用しないようにしてください。それらを使用する方法により、コードを関数に分解することが少し役に立たなくなります。あなたのコードは C++ にはあまりにも手続き的です。

于 2013-09-24T18:40:50.133 に答える