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 (文件中的学生编号)确实可以正常工作,但是,其他一切似乎都无法正常工作。我在弄清楚如何将信息正确放入四个文件之一时也遇到了问题。谢谢你的帮助。我已经尝试了几个小时来让它发挥作用,但我的大脑一直处于空白状态。

编辑:输入文件中的信息如下所示:10168822 Thompson Martha W 3.15 A

翻译为:studNum、nameL、nameF、initM、GPA、majorCode

4

1 回答 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 的第一次读取是尝试将 a 读取string到 afloat中,这可能会在内部某处抛出异常<iostream>(我不确切知道行为是什么,但它不起作用)。这会破坏您的读取,并且其余变量不会从文件中读取。

这段代码应该做你想要完成的事情。

我已经studNum从 a更改double为 along因为您似乎没有任何理由使用它double,并且很可能您可以使用8 位数字,因为无论如何unsigned int都不会溢出。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
    }
}
于 2013-10-15T09:57:42.283 回答