Как извлечь информацию из одного файла и разделить информацию на четыре других файла?

0

Я пытаюсь извлечь информацию из одного файла и использовать одну часть информации (в этой ссылке это будет кто-то крупный). Я хочу направить информацию на четыре других файла (по майору). Извините, если это может быть очевидно для вас, но я действительно сосать в этом. Вот что я имею до сих пор:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
    double studNum;
    float GPA;
    string nameL;
    string nameF;
    char initM;
    char majorCode;
    ifstream inCisDegree;
    ofstream outAppmajor;
    ofstream outNetmajor;
    ofstream outProgmajor;
    ofstream outWebmajor;

    inCisDegree.open("cisdegree.txt");
    if (inCisDegree.fail())
{
    cout << "Error opening input file.\n";
    exit(1);
}
    outAppmajor.open("appmajors.txt");
    outNetmajor.open("netmajors.txt");
    outProgmajor.open("progmajors.txt");
    outWebmajor.open("webmajors.txt");

    while (inCisDegree >> studNum >> GPA >> nameL >> nameF >> initM >> GPA >> majorCode);

    inCisDegree >> studNum >> nameL >> nameF >> initM >> GPA >> majorCode;
    cout.setf(ios::fixed); 
    cout.setf(ios::showpoint);
    cout.precision(2);

Это в основном, насколько я понял. У меня было немного больше, но это было только показать мне, если это сработает или нет. Кажется, что studNum (номер студента в файле) справился с работой, однако все остальное не работает должным образом. У меня также возникают проблемы с тем, как правильно помещать информацию в один из четырех файлов. Спасибо за любую помощь. Я много часов пытался заставить это работать, но мой разум тянет пробелы.

edit: информация во входном файле выглядит так: 10168822 Thompson Martha W 3.15 A

который переводится как: studNum, nameL, nameF, initM, GPA, majorCode

Теги:

1 ответ

0

Глядя на линию

while(inCisDegree >> studNum >> GPA >> nameL >> nameF >> initM >> GPA >> majorCode);

потому что у вас есть точка с запятой в конце, это не будет цикл (предполагая, что это именно так для тестирования, но я думал, что упомянуть об этом в любом случае).

Однако основная проблема с этой строкой заключается в том, что вы указали, что ваш текстовый файл имеет формат

studNum, nameL, nameF, initM, GPA, majorCode

где вы пытаетесь читать

studNum, GPA, nameL, nameF, initM, GPA, majorCode

кроме чтения значения дважды, первое чтение для GPA пытается прочитать string в float, и это, вероятно, бросает исключение где-то внутри <iostream> (я точно не знаю, что такое поведение, но оно выиграло ' т). это нарушает ваше чтение, а остальные переменные не будут считываться из файла.

этот код должен делать то, что вы пытаетесь выполнить.

Я изменил studNum с double на long поскольку у вас нет никаких причин для его использования double, и, вероятно, вы, вероятно, можете использовать unsigned int поскольку 8-значное число не будет переполняться 2^32 любом случае,

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

using namespace std;

int main() {
    long studNum;
    float GPA;
    string nameL;
    string nameF;
    char initM;
    char majorCode;

    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);

    ifstream inCisDegree;
    ofstream outAppmajor;
    ofstream outNetmajor;
    ofstream outProgmajor;
    ofstream outWebmajor;

    inCisDegree.open("cisdegree.txt");
    if (inCisDegree.fail()) {
        cout << "Error opening input file.\n";
        exit(1);
    }

    outAppmajor.open("appmajors.txt");
    outNetmajor.open("netmajors.txt");
    outProgmajor.open("progmajors.txt");
    outWebmajor.open("webmajors.txt");

    while (inCisDegree.good()) {
        string line;
        getline(inCisDegree, line);
        istringstream sLine(line);

        sLine >> studNum >> nameL >> nameF >> initM >> GPA >> majorCode;

        cout << studNum << " " << nameL << " " << nameF << " " << initM << " " << GPA << " " << majorCode << endl;
        // this line is just so we can see what we've read in to the variables
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню