совершенствование программы - полный провал - PullRequest
0 голосов
/ 14 января 2012

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

вот вопрос:

Напишите программу для вычисления числовых оценок за курс. Записи курса находятся в файле, который будет служить входным файлом. Входной файл имеет точно следующий формат: каждая строка содержит фамилию учащегося, затем один пробел, затем имя учащегося, затем один пробел, а затем десять тестовых оценок - все в одной строке. Результаты теста являются целыми числами и разделены одним пробелом. Ваша программа возьмет свои данные из этого файла и отправит их во второй файл. Данные в выходном файле будут такими же, как данные во входном файле, за исключением того, что в конце каждой строки будет один дополнительный номер (типа 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;
}

но я получаю только черное пространство, когда я запускаю программу. Я не могу исправить цикл для чтения из всех строк файла.

1 Ответ

2 голосов
/ 14 января 2012

По состоянию на первую часть: ваш код не решает проблему как указано. Приведенная проблема не говорит о том, что вы вводите количество учеников, но вы должны обработать всех учеников в файле, независимо от их количества. Кроме того, вы пренебрегали частью: «Используйте хотя бы одну функцию, в которой потоки файлов являются всеми или некоторыми ее аргументами».

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

Подсказка: посмотрите на состояние ошибки потока, особенно fail, и используйте цикл while в части 1 и break в части 2.

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