这是我的代码
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];
}
我已经尝试了一切。我试过循环,我尝试了循环。我不明白为什么它不起作用。它既不显示也不立即崩溃,或者它只是“向下滚动”,就像它无限重复但不显示任何文本。 我尝试了一个像这样的循环
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
}
我不明白为什么它根本不起作用;令人难以置信的是令人沮丧。这是我正在处理的同一个程序How do I skip the first line of an array when reading from a file? 我非常内疚地要求你们这么多的帮助,但我真的很想抓住这里。
编辑:这是我的整个代码。
#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
答案 0 :(得分: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)为什么你有一个字符串矩阵?分数通常是一个数字。
我想要学习的主要课程是考虑完全您编写的代码。代码不是一个神秘的魔法咒语,它是计算机的一个精确系列指令。如果您已经考虑过代码的确切功能,请逐步进行操作,您可能已经看到了所做的错误,并希望能够解决它们。你必须进入这种思维方式。
答案 1 :(得分:0)
到目前为止,您的尝试实际上并不会打印整个矩阵,即使它们没有连续循环。首先是while循环,你很可能应该在NUMBER_OF_STUDENTS - 1
初始化looper,因为如果数组中有NUMBER_OF_STUDENTS
行,那么最高元素将是NUMBER_OF_STUDENTS - 1
。由于其他地方存在编码问题,您可能会说NUMBER_OF_STUDENTS + 1
。如果是这种情况,我会首先考虑到这个问题,为了简单起见。
关于你的for循环
for (row = 0; row < NUMBER_OF_STUDENTS + 1; col++) {
cout << matrix[row][col];
cout << endl;
}
这将永远循环,因为你的停止条件依赖于行,但行永远不会改变,只有col会改变。
要打印矩阵中的所有元素,您需要两个循环。像这样:
for(int row=0; row < numOfRows; row++)
for(int col=0; col < numOfCols; col++)
cout << matrix[row][col];