Member 14074353 Ответов: 1

Как я могу выйти из файла outputfile..


выходной файл не хочет выходить наружу . Вы не могли бы мне помочь? я пробовал, пока не получил только одну ошибку . есть ли что-нибудь тайское, что я пропустил? а я еще новичок . мне нужна помощь.
вопрос заключается в том, чтобы написать программу для ведения записей и выполнения статистического анализа для класса из 50 студентов. Для каждого студента у вас будет 10-значный идентификатор, 2 викторины, 2 задания, 2 лабораторных теста, 1 Тест, 1 проект и один итоговый экзамен. Данные учащихся должны храниться в массиве структур учащихся. Эта структура имеет следующие поля:
я)строку : код
ii)3 двойных массива : викторина, жопа, лабтест
iii)4 двойные переменные : тест, проект, финал, итого
iv)переменная 1 char: ранг.
Обеспечьте до 50 студентов.

Входные данные считываются из текстового файла. Каждая строка в файле содержит студенческий билет и баллы за 2 викторины, 2 задания, 2 лабораторных теста, 1 Тест, 1 проект и один итоговый экзамен по порядку. Ваша программа должна рассчитать общее количество баллов и назначить оценку каждому студенту

Что я уже пробовал:

#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>
#include<cstdlib>

using namespace std;

struct DATA
{
	string id;
	double quiz[2];
	double ass[2];
	double labTest[2];
	double test;
	double proj;
	double final;
	double total;
	double midTerm;
	char grade;

};
int main()
{
	ifstream inputfile("studentResults.txt", ios::in);
	ofstream outputfile("result.txt", ios::out);
	if (!inputfile)
	{
		cerr << "the file could not be opened";
		exit(1);
	}
	if (!outputfile)
	{
		cerr << "the file could not be opened";
		exit(1);
	}
	cout << setw(10) << "Matrix Num" << setw(10) << "Quiz(5%)" << setw(10) << "Ass(15%)" << setw(10) << "LabTests(20%)" << setw(10)
		<< "Project(15%)" << setw(10) << "MidTerm(15%)" << setw(10) << "Final(30%)" << setw(10) << "Total(100%) " << setw(10) << "Grade" << endl;

	void studentGrade();
	void countGrade();
	void outputResult();

	DATA student[50]; int  i;
	for (i = 0;i < 50;i++)
		while (inputfile >> student[i].id >> student[i].quiz[0] >> student[i].quiz[1] >> student[i].ass[0] >> student[i].ass[1] >> student[i].labTest[0]
			>> student[i].labTest[1] >> student[i].proj >> student[i].midTerm >> student[i].final >> student[i].total >> student[i].grade)
		{
			cout << student[i].id << student[i].quiz[0] << student[i].quiz[1] << student[i].ass[0] << student[i].ass[1] << student[i].labTest[0]
				<< student[i].labTest[1] << student[i].proj << student[i].midTerm << student[i].final << student[i].total << student[i].grade;
		}
	cout << endl;

}
void studentGrade(DATA student[])
{
	
	
	for (int i = 0; i < 50; i++)
	{
		student[i].total = student[i].midTerm + student[i].proj + student[i].final +
			((student[i].quiz[0] + student[i].quiz[1]) / 2) + (student[i].ass[0] + student[i].ass[1]) / 2 +
			(student[i].labTest[0] + student[i].labTest[1]) / 2;

		if (student[i].total >= 90 && student[i].total <= 100)
			student[i].grade = 'A';

		else if (student[i].total >= 80)
			student[i].grade = 'B';

		else if (student[i].total >= 60)
			student[i].grade = 'C';

		else if (student[i].total >= 40)
			student[i].grade = 'D';

		else
			student[i].grade = 'F';
	}

}
void countGrade(DATA student[], int[])
{
	int i, a = 0, b = 0, c = 0, d = 0, f = 0;
	for (i = 0;i < 50;i++) {

		if (student[i].grade == 'A')
			a++;
		else if (student[i].grade == 'B')
			b++;
		else if (student[i].grade == 'C')
			c++;
		else if (student[i].grade == 'D')
			d++;
		else if (student[i].grade == 'F')
			f++;
	}

}
void outputResult(DATA student[], int g[5])
{

	ofstream outputfile("result.txt", ios::out);
	if (!outputfile)
	{
		cerr << "the file could not be opened";
		exit(1);
	}

	int i;
	for (int i = 0;i < 50;i++)
	{
		student[i].quiz[2] = (student[i].quiz[0] + student[i].quiz[1]) / 2 * 0.05;
		student[i].ass[2] = (student[i].ass[0] + student[i].ass[1]) / 2 * 0.15;
		student[i].labTest[2] = (student[i].labTest[0] + student[i].labTest[1]) / 2 * 0.2;
	}

	outputfile << setw(10) << "Matrix Num" << setw(10) << "Quiz(5%)" << setw(10) << "Ass(15%)" << setw(10) << "LabTests(20%)" << setw(10)
		<< "Project(15%)" << setw(10) << "MidTerm(15%)" << setw(10) << "Final(30%)" << setw(10) << "Total(100%) " << setw(10) << "Grade" << endl;

	for (int i = 0;i < 50;i++)
	{
		outputfile << setw(10) << setw(10) << student[i].id << setw(10) << student[i].quiz[2] << setw(10) << student[i].ass[2]
			<< setw(10) << student[i].ass[2] << setw(10) << student[i].labTest[0] << setw(10) << student[i].labTest[1]
			<< setw(10) << student[i].proj << setw(10) << student[i].midTerm << setw(10) << student[i].final
			<< setw(10) << student[i].total << setw(10) << student[i].grade << endl;
	}
	outputfile << endl;
	outputfile << "Total Students for Grade A   : " << g[0] << endl;
	outputfile << "Total Students for Grade B   : " << g[1] << endl;
	outputfile << "Total Students for Grade C   : " << g[2] << endl;
	outputfile << "Total Students for Grade D   : " << g[3] << endl;
	outputfile << "Total Students for Grade F   : " << g[4] << endl;


	outputfile << "\nA : ";
	for (i = 0;i < g[0];i++)
		outputfile << "* ";

	outputfile << "\nB : ";
	for (i = 0;i < g[1];i++)
		outputfile << "* ";

	outputfile << "\nC : ";
	for (i = 0;i < g[2];i++)
		outputfile << "* ";

	outputfile << "\nD : ";
	for (i = 0;i < g[3];i++)
		outputfile << "* ";

	outputfile << "\nF : ";
	for (i = 0;i < g[4];i++)
		outputfile << "* ";

	outputfile.close();

}

1 Ответов

Рейтинг:
0

OriginalGriff

Что ж... Вы создали функции, но на самом деле не вызываете их!

Посмотрите на вашу основную функцию, и вы увидите, что вы только ссылаетесь studentGrade, countGrade, и outputResult в качестве объявлений функций вы ни в коем случае не вызываете их, передавая необходимые параметры.
Где-то в вашем коде вам понадобятся такие строки:

studentGrade(student);
countGrade(student, arrayOfGrades);
и
outputResult(student, arrayOfGrades);
(и вам придется изменить countGrade чтобы фактически заполнить массив оценок, а не отбрасывать информацию при его выходе).


Member 14074353

на этот раз я попробовал безрезультатно . все в порядке?
#include<iostream>
#включить<fstream>
#включить<iomanip>
#include<string>
#включить<cstdlib>

использование пространства имен std;

структурные данные
{
идентификатор строки;
двойной тест[2];
двойная задница[2];
двойной лабораторный тест[2];
двойной тест;
двойной проект;
двойной финал;
двухместный общая;
двойной промежуточный экзамен;
голец класс;

};

тап_п()
{
ifstream inputfile("studentResults.txt", ios::in);
если (!входной_файл)
{
cerr << "файл не удалось открыть";
выход(1);
}


Данные студента[50]; int g[5], i;
для (i = 0; i < 50; i++) {
входной файл &ГТ;&ГТ; ученик[я].ИД &ГТ;&ГТ; ученик[я].викторина[0] &ГТ;&ГТ; ученик[я].викторины[1] &ГТ;&ГТ; ученик[я].АСС[0] &ГТ;&ГТ; ученик[я].АСС[1] &ГТ;&ГТ; ученик[я].лабтест[0]
&ГТ;&ГТ; ученик[я].лабтест[1] &ГТ;&ГТ; ученик[я].прое &ГТ;&ГТ; ученик[я].среднесрочный &ГТ;&ГТ; ученик[я].окончательный &ГТ;&ГТ; ученик[я].общая &ГТ;&ГТ; ученик[я].класс;
}

входной_файл.рядом();

//void studentGrade();
//недействительными countGrade();
//void outputResult();

for (int i = 0; i < 50; i++)
{
студент[i].итого = студент[i].промежуточный + студент[i].проект + студент[i].финал +
((ученик[я].викторина[0] + студент[я].викторины[1]) / 2) + (студент[я].АСС[0] студент + [я].АСС[1]) / 2 +
(студент[i].labTest[0] + студент[i].labTest[1]) / 2;

если (студент[я].общая &ГТ;= 90 &&усилителя; ученик[я].общая &ЛТ;= 100)
студент[i].класс = 'A';

else if (student[i].total >= 80)
студент[i].класс = 'B';

else if (student[i].total >= 60)
студент[i].оценка = 'C';

else if (student[i].total >= 40)
студент[i].оценка = 'D';

еще
студент[i].оценка = 'F';
}


int a = 0, b = 0, c = 0, d = 0, f = 0;
для (i = 0; i < 50; i++) {

if (student[i].grade == 'A')
ля++;
else if (student[i].grade == 'B')
b++;
остальное, если (студент[я].класс = = "с")
с++;
else if (student[i].grade == 'D')
д++;
else if (student[i].grade == 'F')
Ф++;

потока выходной_файл("result.txt" для iOS::нет);
если (!выходной_файл)
{
cerr << "файл не удалось открыть";
выход(1);
}

int i;
for (int i = 0; i < 50; i++)
{
студент[я].викторины[2] = (студент[я].викторина[0] + студент[я].викторины[1]) / 2 * 0.05;
студент[i].ass[2] = (студент[i].ass[0] + студент[i].ass[1]) / 2 * 0,15;
student[i].labTest[2] = (student[i].labTest[0] + student[i].labTest[1]) / 2 * 0.2;
}

выходной_файл &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "Матрица Нум" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "викторина(5%)" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "задницу(15%)" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "LabTests(20%)" &ЛТ;&ЛТ; разделе setw(10)
<< "проект(15%)" << setw(10) << " промежуточный(15%)" << setw(10) << " окончательный(30%)" << setw(10) << "общий(100%)" << setw(10) << "класс" << endl;

for (int i = 0; i < 50; i++)
{
выходной_файл &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].ИД &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].викторины[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].АСС[2]
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].АСС[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].лабтест[0] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].лабтест[1]
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].прое &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].среднесрочный &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].окончательный
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].общая &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].класс на << епси;
}
outputfile << endl;
outputfile << "общее количество учащихся для класса А :" << g[0] << endl;
outputfile << "общее количество учащихся для класса B :" << g[1] << endl;
outputfile << "общее количество учащихся для класса C :" << g[2] << endl;
outputfile << "общее количество учащихся для класса D :" << g[3] << endl;
выходной_файл &ЛТ;&ЛТ; "общая студентов за класс Ф.:" &ЛТ;&ЛТ; г[4] &ЛТ;< епси;


выходной_файл &ЛТ;&ЛТ; "\НС : ";
для (i = 0; i < g[0]; i++)
выходной_файл &ЛТ;&ЛТ; "* ";

выходного

OriginalGriff

Делайте это с функциями - это делает код более читабельным, но вы должны вызывать их, когда хотите их использовать!

Member 14074353

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

OriginalGriff

Я уже это сделал! Прочтите, что я сказал в первоначальном ответе.

Member 14074353

Я пытался использовать ваш совет, но мое кодирование полностью ошибочное .

void studentGrade();
пустота countGrade();
void outputResult();
Я должен изменить это правильно или это все еще неправильно

OriginalGriff

Вот простой пример "вызова функции" :
int GetSquare(int x)
{
возвращение х * х;
}
тап_п()
{
for (int i = 1; i < 10; i++)
{
int square = GetSquare(i);
соиь <&ЛТ; квадрат &ЛТ;&ЛТ; "\Н";
}
возвращает 0;
}

Попробуйте это сделать, и он напечатает квадраты каждого из чисел от 1 до 9.
Он делает это, вызывая функцию GetSquare внутри цикла и передавая ей значение для обработки каждый раз.

Вам нужно сделать что - то подобное в своем коде. Посмотрите на три строки, которые я предложил, и вы должны понять, что делать.

Member 14074353

это мое последнее кодирование . это все еще неправильно
#include<iostream>
#включить<fstream>
#включить<iomanip>
#include<string>
#включить<cstdlib>

использование пространства имен std;
структурные данные
{
идентификатор строки;
двойной тест[2];
двойная задница[2];
двойной лабораторный тест[2];
двойной тест;
двойной проект;
двойной финал;
двухместный общая;
двойной промежуточный экзамен;
голец класс;

};
void studentGrade(DATA student[], int i);
void countGrade(DATA student[], int[]);
void outputResult(DATA student[], int g[5]);


тап_п()
{
Данные студента[50]; int i;
потока выходной_файл;
выходной_файл.открытые("studentResults.txt");

если (!выходной_файл)
{
cout << "файл не удалось открыть";
выход(1);
}

выходной_файл &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "Матрица Нум" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "викторина(5%)" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "задницу(15%)" &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; "LabTests(20%)" &ЛТ;&ЛТ; разделе setw(10)
<< "проект(15%)" << setw(10) << " промежуточный(15%)" << setw(10) << " окончательный(30%)" << setw(10) << "общий(100%)" << setw(10) << "класс" << endl;

for (int i = 1; i <= 50; i++)
{
{
void studentGrade(DATA student[], int i);
cout << endl;
выходной_файл &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].ИД &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].викторины[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].АСС[2]
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].лабтест[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].прое &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].среднесрочный
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].окончательный &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].общая &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].класс;
}
cout << endl;
}
для (i = 1; i <= 50; i++)
{
{
void countGrade(DATA student[], int[]);
cout << endl;
выходной_файл &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].ИД &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].викторины[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].АСС[2]
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].лабтест[2] &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].прое &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].среднесрочный
&ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].окончательный &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].общая &ЛТ;&ЛТ; разделе setw(10) &ЛТ;&ЛТ; ученик[я].класс;
}
cout << endl;
}
выходной_файл.рядом();
возвращает 0;
}
void studentGrade(DATA student[], int i)
{
cout << "введите id: "<<endl;
Кин &ГТ;&ГТ; ученик[я].идентификатор;
cout << "введите тест 1: ";
cin >> студент[i].викторина[0];
cout << "введите тест 2: ";
cin >> студент[i].викторина[1];
cout << "введите ass 1: ";
студент[я].викторины[2] = (студент[я].викторина[0] + студент[я].викторины[1]) / 2 ;
cin >> student[i].ass[0];
cout << "введите ass 2: ";
cin >> student[i].ass[1];
student[i].ass[2] = (student[i].ass[0] + student[i].ass[1]) / 2 ;
cout << "введите лабораторный тест 1: ";
cin >> student[i].labTest[0];
cout << "введите лабораторный тест 2: ";
cin >> student[i].labTest[1];
student[i].labTest[2] = (student[i].labTest[0] + student[i].labTest[1]) / 2;
cout << "введите метки проекта: ";
cin >> student[i].proj;
cout << "введите промежуточные отметки: ";
cin >> student[i].proj;
cout << "введите окончательные отметки: ";
Кин &ГТ;&ГТ; ученик[я].окончательный;

студент[я].итого = студент[я].среднесрочный + студент[я].прое + студент[я].финал +студент[я].викторины[2] студент + [я].АСС[2] +
студент[я].лабтест[2] студент + [я].прое + студент[я].прое + студент[я].окончательный;

for (int i = 0; i < 50; i++)
{
если (студент[я].общая &ГТ;= 90 &&усилителя; ученик[я].общая &ЛТ;= 100)
студент[i].класс = 'A';

else if (student[i].total >= 80)
студент[i].класс = 'B';

else if (student[i].total >= 60)
студент[i].оценка = 'C';

else if (student[i].total >= 40)
студент[i].оценка = 'D';

еще
студент[i].оценка = 'F';
}

}
void countGrade(DATA student[], int[])
{
int i, a = 0, b = 0, c = 0, d = 0, f = 0;
для (i = 0;i < 50;i++) {

если (студент[

OriginalGriff

Перестаньте паниковать и прыгать в код - сначала подумайте, и он должен работать лучше.
Вернитесь к своей первой версии и внимательно прочитайте то, что я сказал.

Вы пробовали маленький пример кода, который я показал квадратным числам? Есть ли во всем этом смысл?