我知道,如果我不用完数组中的所有空间,计算机将只用垃圾值填充它,但是如何阻止它们出现在输出中?用户也不能指定数组的大小(在本练习中,教授是这样指定的)。如果有帮助,我正在从文本文件中读取内容。
const int STUDENTS = 50; //size of array
struct StudentInfo
{
string name;
char char_name[SIZE];
int idnumber;
int num1;
int num2;
int num3;
int num4;
int num5;
int num6;
int num7;
};
int main()
{
StudentInfo student[STUDENTS];
ifstream inFile;
int i = 0;
inFile.open("guesses.txt");
if (!inFile)
cout << "\n\n**** ERROR OPENING FILE. ******\n" << endl;
else
{
while (!inFile.eof())
{
inFile >> student[i].idnumber;
inFile.getline(student[i].char_name, SIZE, '\n');
student[i].name = student[i].char_name;
inFile >> student[i].num1;
inFile >> student[i].num2;
inFile >> student[i].num3;
inFile >> student[i].num4;
inFile >> student[i].num5;
inFile >> student[i].num6;
inFile >> student[i].num7;
i++;
if (inFile.eof())
break;
}
for (int i = 0; i < STUDENTS; i++) //loop i use for output
{
cout << left;
cout << setw(5) << student[i].idnumber;
cout << setw(15) << student[i].name;
cout << right;
cout << setw(6) << student[i].num1;
cout << setw(6) << student[i].num2;
cout << setw(6) << student[i].num3;
cout << setw(6) << student[i].num4;
cout << setw(6) << student[i].num5;
cout << setw(6) << student[i].num6;
cout << setw(6) << student[i].num7;
cout << endl;
}
cout << endl << endl << endl;
inFile.close();
system("pause");
}
答案 0 :(得分:1)
这听起来像是功课,您没有提供足够的信息来回答问题。但是,听起来好像您正在读取一定数量的学生的数据。
如果您知道循环开始时有多少学生,可以说,由于输入文件中包含列表前的数字,因此可以在循环条件下用该变量替换常量STUDENTS
。 / p>
如果您需要读不计其数的学生,则可以在读完最后一卷后终止循环。您可以在循环体内输出每个学生的数据,也可以在循环之前将循环计数器初始化为0
,在循环外声明它,这样它将保留在范围内,在每次迭代时递增,然后在循环终止,计数器将被设置为读入的元素数。
在您的MCVE中,您已经在循环之前声明了int i = 0;
,因此您只需进行最小的更改即可实现第二种方法。一些评论者建议,您可以使用一个更具描述性的名称,而不是像i
这样的简短变量名称,例如students_in_array
。