добрый день всем.
У меня возникли проблемы с попытками выяснить, как улучшить мою программу.
вот вопрос:
Напишите программу для вычисления числовых оценок за курс. Записи курса находятся в файле, который будет служить входным файлом. Входной файл имеет точно следующий формат: каждая строка содержит фамилию учащегося, затем один пробел, затем имя учащегося, затем один пробел, а затем десять тестовых оценок - все в одной строке. Результаты теста являются целыми числами и разделены одним пробелом. Ваша программа возьмет свои данные из этого файла и отправит их во второй файл. Данные в выходном файле будут такими же, как данные во входном файле, за исключением того, что в конце каждой строки будет один дополнительный номер (типа double). Это число будет средним из десяти оценок ученика. Если это делается как назначение класса, получите имена файлов у своего инструктора. Используйте по крайней мере одну функцию, у которой есть файловые потоки в качестве всех или некоторых ее аргументов.
Мне удалось успешно выполнить первую часть. ниже код:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
fstream infile("grades.txt",ios::in);
if(!infile){cerr<<"file could not be found!";exit(1);}
fstream outfile("average.txt",ios::out);
if(!outfile){cerr<<"file could not be created!";exit(1);}
char fname[20];
char lname[20];
int grades[10];
char c;
int x;
cout<<"how many students?";
cin>>x;
for(int k=0;k<x;k++)
{
infile>>fname;
infile>>lname;
for(int i=0;i<10;i++)
infile>>grades[i];
outfile<<fname<<" "<<lname<<" ";
double sum=0;
for(int j=0;j<10;j++)
{
outfile<<grades[j]<<" ";
sum+=grades[j];
}
double avg=0;
avg=sum/10;
outfile<<avg<<endl;
}
system("pause");
return 0;
}
Я не могу выполнить часть (а) второй части. я попытался инициализировать массив grades [10] нулями, но я не получаю правильного вывода. любая помощь? спасибо.
Улучшение программы, для которой вы написали (задача 10), во всех следующих
пути.
a-Список оценок викторины в каждой строке будет содержать десять из меньшего количества викторины
баллы. (Если количество тестов меньше десяти, это означает, что
что студент пропустил один или несколько тестов.) Средний балл
по-прежнему сумма баллов викторины делится на 10. Это составляет
давая студенту 0 за любой пропущенный тест.
b-выходной файл будет содержать строку (или строки) в начале
файл, объясняющий вывод. Используйте инструкции по форматированию для
сделать макет аккуратным и легко читаемым. в- после размещения желаемого
вывод в выходной файл, ваша программа закроет все файлы, а затем
скопируйте содержимое «выходного» файла во «входной» файл так,
что чистый эффект заключается в изменении содержимого входного файла.
Используйте как минимум две функции с файловыми потоками как все или некоторые из
их аргументы. Если это делается как назначение класса,
получить имена файлов из вашей инструкции.
вот как выглядит мой код
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main()
{
fstream infile("grades.txt",ios::in);
if(!infile){cerr<<"file could not be found!";exit(1);}
fstream outfile("average.txt",ios::out);
if(!outfile){cerr<<"file could not be created!";exit(1);}
char fname[20];
char lname[20];
int grades;
int sum=0;
int linecount=0;
char c;
while(!infile.eof())
{
infile>>lname;
infile>>fname;
outfile<<lname<<" "<<fname<<" ";
for(int i=0;i<10;i++){if(infile>>grades)outfile<<grades<<" ";else {outfile<<"0 ";break;} sum+=grades;}
outfile<<double(sum/10.0);
}
system("pause");
return 0;
}
но я получаю только черное пространство, когда я запускаю программу. Я не могу исправить цикл для чтения из всех строк файла.