我正在尝试从单个文件中提取信息,并使用一条信息(在此参考中它将是某些主要信息)我想将信息导向其他四个文件(根据专业)。对不起,如果这对您来说很明显,但我真的很尴尬。以下是我到目前为止的情况:
#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
答案 0 :(得分: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>
内部抛出异常(i不确切知道行为是什么,但它不起作用)。这会破坏您的读取,其余的变量将不会从文件读入。
这段代码应该做你想要完成的事情。
我已将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
}
}