Проблема сравнения элемента массива с числом (массив является частью динамического массива структур)
Задание:
Создать бинарный файл, компонентами которого является структура со следующими полями: фамилия и инициалы студентов, номер группы, успеваемость (массив из трех дисциплин), размер стипендии. Переписать бинарный файл так, чтобы для студентов, у которых нет троек, размер стипендии должен быть увеличен на 30%.
Так вот, у меня возникла проблема с проверкой, есть ли в массиве успешности оценки больше 3.
Мой код(он ещё до конца не дописан, меня застопорило только это сравнение):
#include <iostream>
#include <string>
#include <iomanip>
#pragma warning(disable: 4996)
using namespace std;
struct Student
{
string FIO;
string Group;
int AcademicPerformance[3];
int Scholarship_size;
void readInfo();
void outputInfo();
};
void Student::readInfo()
{
cin.ignore(32767, '\n');
cout << "Input FIO: ";
getline(cin, FIO, '\n');
cout << "Input Group: ";
getline(cin, Group, '\n');
cout << "Input Academic performance: " << endl;
for (int i = 0; i < 3; i++)
{
cin >> AcademicPerformance[i];
}
cout << "Input scholarship size: ";
cin >> Scholarship_size;
}
void Student::outputInfo()
{
cout << "FIO: " << FIO << endl;
cout << "Group: " << Group << endl;
cout << "Academic Performance: ";
for (int i = 0; i < 3; i++)
{
cout << AcademicPerformance[i] << setw(3);
}
cout << "\nScholarship size: " << Scholarship_size << endl;
}
int main()
{
cout << "Input the number of students: ";
int number;
cin >> number;
Student* student = new Student[number];
for (int i = 0; i < number; i++)
{
student[i].readInfo();
cout << endl;
}
char fileName[] = "StudentInfo.bin";
FILE* file_1, * file_2;
file_1 = fopen(fileName, "wb");
fwrite(student, sizeof(Student), number, file_1);
fclose(file_1);
Student* studentInfo = new Student[number];
file_2 = fopen(fileName, "rb");
fread(studentInfo, sizeof(Student), number, file_2);
fclose(file_2);
for (int i = 0; i < number; i++)
{
for (int j = 0; j < 3; j++)
{
if (studentInfo[j].AcademicPerformance > 3)
{
studentInfo[i].Scholarship_size = studentInfo[i].Scholarship_size + (studentInfo[i].Scholarship_size * 0.3);
}
}
studentInfo[i].outputInfo();
}
}
Вот в этом фрагменте
if (studentInfo[j].AcademicPerformance > 3)
Выдаёт ошибку
Несовместимые типы операндов ("int* и int")
Честно, я не очень понимаю как в таком случае проводить проверку, поэтому надеюсь на подсказку опытных программистов.
Ответы (1 шт):
Если я все правильно понял, то ты возвращаешь указатель. Тебе просто нужно разыминвать его, при получении.
-Вместо
studentInfo[j].AcademicPerformance > 3
Пиши
*studentInfo[j].AcademicPerformance > 3