C++ Homework:来自文本文件的并行数组

Mic*_*ael 1 c++ arrays parallel-processing

我必须从文本文件加载三个数组作为家庭作业,我无法弄清楚它为什么不起作用.这就是文本文件的样子:

Jean Rousseau  
1001 15.50
Steve Woolston
1002 1423.20
Michele Rousseau
1005 52.75
Pete McBride
1007 500.32
Run Code Online (Sandbox Code Playgroud)

它是一行上的名称,然后是由空格分隔的下一行的id号和余额.

这是我导入数据的功能:

void InputFromFile(string fileName, int sizes, string namesAr[],
int idsAr[], float balancesAr[])
{
// Variables
int indexCount;
ifstream inFile;

// Initialize
indexCount = 0;

inFile.open(fileName.c_str());

while(inFile && indexCount < sizes)
{
    getline(inFile, namesAr[indexCount]);
    inFile >> idsAr[indexCount];
    inFile.ignore(1000, '\n');
    inFile >> balancesAr[indexCount];
    inFile.ignore(1000, '\n');
    indexCount++;
}

inFile.close();
}
Run Code Online (Sandbox Code Playgroud)

这是我输出所有项目时添加到数组中的内容...

Jean Rousseau
1001
0

-1
3.76467e-039

36
3.76457e-039

0
6.57115e-039

7736952
8.40779e-045

7736952
0

Jam*_*lis 7

inFile >> idsAr[indexCount];
inFile.ignore(1000, '\n');
Run Code Online (Sandbox Code Playgroud)

您从该行读取第一个数字,然后忽略所有字符,直到该行结束,包括第二个数字.然后,您尝试读取下一个名称,就好像它是一个数字一样,并且因为您没有进行任何错误检查,所以一切都会出错.

ignore完全没必要:第一个和第二个数字之间没有什么可以忽略的,因为它>>会跳过任何前导空格.第二个ignore 必要的,因为在getline用于读取下一个名称行之前,您必须跳过数字行末尾的换行符.您可能更容易仅使用getline从文件中读取数据,然后使用a解析数字行stringstream.将格式化的extract(>>)与基于行的提取混合可能很难正确.

在任何输入操作之后,您必须检查流的状态以确保没有发生错误.举个简单的例子:

if (!(inFile >> idsAr[indexCount]) {
    /* input failed; handle error as appropriate */
}
Run Code Online (Sandbox Code Playgroud)

流有许多状态标志,当提取失败时,fail标志已设置,必须先清除才能继续使用流.