如何在输出循环中停止垃圾值

时间:2018-12-05 00:45:12

标签: c++ arrays output

我知道,如果我不用完数组中的所有空间,计算机将只用垃圾值填充它,但是如何阻止它们出现在输出中?用户也不能指定数组的大小(在本练习中,教授是这样指定的)。如果有帮助,我正在从文本文件中读取内容。

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");
}

1 个答案:

答案 0 :(得分:1)

这听起来像是功课,您没有提供足够的信息来回答问题。但是,听起来好像您正在读取一定数量的学生的数据。

如果您知道循环开始时有多少学生,可以说,由于输入文件中包含列表前的数字,因此可以在循环条件下用该变量替换常量STUDENTS。 / p>

如果您需要读不计其数的学生,则可以在读完最后一卷后终止循环。您可以在循环体内输出每个学生的数据,也可以在循环之前将循环计数器初始化为0,在循环外声明它,这样它将保留在范围内,在每次迭代时递增,然后在循环终止,计数器将被设置为读入的元素数。

在您的MCVE中,您已经在循环之前声明了int i = 0;,因此您只需进行最小的更改即可实现第二种方法。一些评论者建议,您可以使用一个更具描述性的名称,而不是像i这样的简短变量名称,例如students_in_array