Как ввести массив строк из структуры в этом случае? - PullRequest
1 голос
/ 18 апреля 2020

Итак, я новичок. У меня есть этот код и несколько проблем. Для лучшего понимания вам понадобится следующий код:

struct student
{
    double marks;
    char name[50];
}stud[100],t;

int main()
{
    int i,j,n;
    cout<<"Enter the number of students: ";
    cin>>n;
    cout<<"Enter student info as name , marks\n";
    for(i=0;i<n;i++)
    {
        cin>>stud[i].name;
        cin>>stud[i].marks;
    }

Проблема заключается в том, что вместо этой части:

struct student
{
    double marks;
    char name[50];
}stud[100],t;

Там должна быть эта часть:

struct student
{
    double marks[];
    string name[];
}stud[100],t;

Но тогда я не знаю, как ввести эти данные в программу, потому что тогда cin >> не работает. Задача говорит, что когда пользователь вводит '' (ENTER), программа должна завершить sh и показать печать студентов по порядку.

Ответы [ 3 ]

0 голосов
/ 18 апреля 2020

Метки и массив имен являются динамическими c и называются гибкими элементами массива, и они не поддерживаются в cpp вы можете ссылаться на эту ссылку Допустимы ли члены гибкого массива в C ++? и кроме того, они поддерживаются в c, и у вас может быть не более одного элемента гибкого массива, и он должен быть в конце https://www.geeksforgeeks.org/flexible-array-members-structure-c/

0 голосов
/ 18 апреля 2020

Я считаю, что это близко к тому, что вы хотите:

//10 marks by students
int m = 10;

struct student
{
    double marks[m];
    string name;
}stud[100],t;

int main()
{
    int i,j,n;
    cout<<"Enter the number of students: ";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"Enter student info as name\n";
        cin>>stud[i].name;
        for(int j=0; j<m; ++j)
        {
            cout<<"Enter student marks "<<j+1<<endl; 
            cin>>stud[i].marks[j];
        }
    }
}
0 голосов
/ 18 апреля 2020

Вам понадобится секунда l oop. Я добавил константы - это хорошая практика, поэтому в вашем коде нет «магических чисел c». Я добавил функцию отображения, чтобы продемонстрировать, что она работает!

#include <iostream>

using namespace std;

const int MAX_MARKS = 25;
const int MAX_STR = 50;
const int MAX_STUDENTS = 100;

struct student
{
    double marks[MAX_MARKS];
    char name[MAX_STR];
}stud[MAX_STUDENTS],t;

int main()
{
    int i,j,n;
    bool complete = false;
    cout<<"Enter the number of students: ";
    cin>>n;
    for(i=0; i < n && i < MAX_STUDENTS; ++i)
    {
        complete = false;
        cout<<"Enter student info as name , marks\n";
        cin>>stud[i].name;
        for (j = 0; j < MAX_MARKS; ++j)
        {
            if (!complete)
            {
                cout << "Enter mark #" << j+1 << ": ";
                if (!(cin >> stud[i].marks[j]))
                {
                    complete = true;
                    stud[i].marks[j] = -1.0;
                    cin.clear();
                    cin.ignore(100, '\n');
                }
            }
            else
                stud[i].marks[j] = -1.0; //0.0 is a valid grade so need a different value
        }
    }

    //Added a block for displaying the students
    for (i = 0; i < MAX_STUDENTS && i < n; ++i)
    {
        complete = false;
        cout << "Student #" << i+1 << ": " << stud[i].name << endl;
        for (j = 0; j < MAX_MARKS && !complete; ++j)
        {
            if (stud[i].marks[j] == -1.0)
                complete = true;
            else
                cout << "\tMark #" << j+1 << ": " << stud[i].marks[j] << endl;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...