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

时间:2011-02-24 06:00:29

标签: c++ arrays parallel-processing

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

Jean Rousseau  
1001 15.50
Steve Woolston
1002 1423.20
Michele Rousseau
1005 52.75
Pete McBride
1007 500.32

这是一行上的名称,然后是下一行以空格分隔的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();
}

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

让·卢梭(Robert Rousseau) 1001
0

-1
3.76467e-039

36
3.76457e-039

0
6.57115e-039

7736952
8.40779e-045

7736952
0

1 个答案:

答案 0 :(得分:7)

inFile >> idsAr[indexCount];
inFile.ignore(1000, '\n');

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

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

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

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

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