0

これが私のコードです

void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS)
{
int row, col;
//this code below is to loop it so it displays all the values
/* for (row = 0; row < NUMBER_OF_STUDENTS + 1; col++)
{
   cout <<  matrix[row][col];
   cout << endl;
}
*/
int looper = 0;
// THIS IS THE FORMAT FOR DISPLAYING ONE LINE MAN

//cout << matrix[0][0];
//cout << matrix[0][1];



//this is just some test code to see if it can output certain values right
//  cout << matrix[0][0];
// cout << matrix[0][1];
// cout << matrix[0][2];
// cout << matrix[0][3];
} 

私はすべてを試しました。for ループと while ループを試しました。うまくいかない理由がわかりません。何も表示されずにすぐにクラッシュするか、テキストが表示されずに無限に繰り返されるように「スクロール」し続けるかのいずれかです。私が試したwhileループがありましたが、このようになりました

int looper;
int looper = NUMBER_OF_STUDENTS;
//in this instance, NUMBER_OF_STUDENTS was equal to 28
while (looper > 0)
{
cout << matrix[looper][0];
cout << matrix[looper][1];
looper--; 
//i have tried both looper-- and --looper
}

まったく機能しない理由がわかりません。それは信じられないほどイライラします。これは、ファイルから読み取るときに配列の最初の行をスキップするにはどうすればよいですか?と同じプログラムです。 皆さんに多大な助けを求めることは非常に罪悪感がありますが、ここで真剣にスナップしようとしています.

編集:これが私のコード全体です。

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

const int NUMBER_OF_STUDENTS = 28;
const int NUMBER_OF_SCORES = 28;

void getData (ifstream& infile, string matrix[][NUMBER_OF_SCORES + 1 ],
                    int NUMBER_OF_STUDENTS) ;

void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS);



int main()
{
string birdarray [NUMBER_OF_STUDENTS][NUMBER_OF_SCORES +1 ] ;
              // column 0 will hold the student ID.
              // row n has the ID and birdarray for student n.


ifstream inData; //input file stream variable
inData.open("one.txt");

if ( !inData)
{
     cout << "invalid file name \n";

     return 1;
}

// input the birdarray into two-D array birdarray
getData ( inData , birdarray, NUMBER_OF_STUDENTS );
printMatrix(birdarray, NUMBER_OF_STUDENTS);



// return  the row number of a searchItem in a particular column.
// if not found, return -1
}


void getData (ifstream& infile,string chart[][NUMBER_OF_SCORES + 1 ],
                    int student_count)

{
 int row, col;
 string dummyLine;
 getline(infile, dummyLine);
 for ( row = 0; row < student_count; row++)
    for (col =0; col <  NUMBER_OF_SCORES +1  ; col++)
        infile  >> chart [row] [col] ;


}
void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS)
{
int row, col;
//this code below is to loop it so it displays all the values
/* for (row = 0; row < NUMBER_OF_STUDENTS + 1; col++)
{
   cout <<  matrix[row][col];
   cout << endl;
}
*/
int looper = 0;
// THIS IS THE FORMAT FOR DISPLAYING ONE LINE MAN

//cout << matrix[0][0];
//cout << matrix[0][1];





//this is just some test code to see if it can output certain values right
//  cout << matrix[0][0];
// cout << matrix[0][1];
// cout << matrix[0][2];
// cout << matrix[0][3];
}
//prints a labeled listing of students' scores
4

2 に答える 2

1

値の表を印刷する通常の方法は次のとおりです

void printMatrix(string matrix[][NUMBER_OF_SCORES + 1], int NUMBER_OF_STUDENTS)
{
  for (int row = 0; row < NUMBER_OF_STUDENTS + 1; ++row)
  {
    for (int col = 0; col < NUMBER_OF_SCORES; ++col)
    {
      cout << matrix[row][col] << ' ';
    }
    cout << '\n';
  }
}

しかし、あなたのコードには気に入らないことがたくさんあります。したがって、これが正しいかどうかは私には言えません。特に疑問に思うのは

1) を持っているのはなぜNUMBER_OF_STUDENTS + 1ですか? の明らかな必要性はありません+ 1。おそらく、他の場所で犯した間違いを補おうとしているのでしょう。

2) 文字列の行列があるのはなぜですか? 通常、スコアは数値です。

学ぶべき主な教訓は、自分が書いたコードが何をするのかを正確に考えることだと思います。コードは不思議な魔法の呪文ではなく、コンピューターへの正確な一連の命令です。自分のコードが何をしているのかを正確に考え、それを順を追って実行していれば、犯したエラーを確認でき、できれば修正できたはずです。あなたはその考え方に入らなければなりません。

于 2013-04-06T06:30:31.120 に答える
0

これまでの試みでは、連続してループしていなくても、実際にはマトリックス全体を出力することはできませんでした。最初に while ループの場合、配列に行があるNUMBER_OF_STUDENTS - 1場合、最上位の要素は になるため、looper を at で初期化する必要がある可能性が非常に高くなります。ただし、他の場所でのコーディングの問題が原因である可能性があります。その場合は、簡単にするために最初にその問題を処理しようとします。NUMBER_OF_STUDENTSNUMBER_OF_STUDENTS - 1NUMBER_OF_STUDENTS + 1

あなたのforループについて

for (row = 0; row < NUMBER_OF_STUDENTS + 1; col++) {
   cout <<  matrix[row][col];
   cout << endl;
}

停止条件は行に依存するため、これは永遠にループしますが、行は決して変更されず、col のみが変更されます。

マトリックス内のすべての要素を出力するには、2 つのループが必要です。このようなもの:

for(int row=0; row < numOfRows; row++)
    for(int col=0; col < numOfCols; col++)
         cout << matrix[row][col];
于 2013-04-06T06:23:33.457 に答える