Как остановить значения мусора в цикле вывода - PullRequest
0 голосов
/ 05 декабря 2018

Я знаю, что если я не израсходую все пространство в массиве, компьютер просто заполнит его значениями мусора, но как мне остановить их отображение в выводе?Пользователь также не может указать размер массива (профессор так и сделал для этой лаборатории).Я читаю из текстового файла, если это помогает.

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 голосов
/ 05 декабря 2018

Звучит как домашнее задание, и вы не даете достаточно информации, чтобы ответить на вопрос.Тем не менее, это звучит так, как будто вы читаете данные об определенном количестве студентов.

Если вы знаете, сколько студентов в начале цикла, скажем, потому что входной файл содержит число досписок, вы можете заменить константу STUDENTS на эту переменную в условии цикла.

Если вам нужно читать с неизвестным числом студентов, вы можете завершить цикл после того, как прочитали в последнемодин.Либо вы выводите данные каждого студента в теле цикла, либо инициализируете счетчик цикла равным 0 перед циклом, объявляя его вне цикла, чтобы он оставался в области видимости, увеличивая его на каждой итерации, а затем, когда циклпосле завершения счетчик будет установлен на количество считанных элементов.

В MCVE вы уже объявляете int i = 0; перед циклом, поэтому вам нужно будет внести только минимальные изменения для реализации второго.подход.Некоторые комментаторы предлагают, чтобы вместо короткого имени переменной, такого как i, вы могли бы сделать более описательный, такой как, возможно, students_in_array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...